PDA

View Full Version : مشکل با distinct



cache_overflow
چهارشنبه 13 شهریور 1387, 19:09 عصر
دوستان،
من می خواهم از بین چند فیلدی که در دستور select مشخص کرده ام distinct فقط بر روی یکی از آنها اعمال بشه. در صورت امکان من را راهنمایی کنید.
به عنوان مثال در دستور روبرو distinct بر روی تمام فیلدها اعمال میشه:



select distinct col1,col2,col3 from table
ولی من می خواهم فقط روی col1 دستور distinct اعمال بشه.

cache_overflow
پنج شنبه 14 شهریور 1387, 09:24 صبح
اگر کسی از دوستان می دونه لطفا راهنمایی کنه.

mannai29
پنج شنبه 14 شهریور 1387, 09:27 صبح
فلسفه distinct چیز دیگری است و مربوط به مشکل شما نمی شود. distinct روی رکوردها اعمال می شود و رکورد تکراری را در خروجی نمایش نمی دهد.ضمن آنکه اگر ساختار بانک شما نرمال باشد حتما دلیلی برای تکرار فیلد col1 وجود دارد.
شما باید به صورت علمی به مسئله نگاه کنید و هر گاه متوجه شدید که کدام مقدار col1 را به ازای باقی فیلدها نیاز دارید با دستوراتی مانند Group By , ویا توابع max , sum ... و اعمال آنها روی فیلد مورد نظر خروجی مورد نظر خود را تولید کنید.

cache_overflow
پنج شنبه 14 شهریور 1387, 11:22 صبح
در جدول مقدار col1 تکراری است. و به ازای هر مقدار از col1 در col2 نیز مقداری وجود دارد.

col1 col2
a 4
a 5
a 8
b 6

حالا من می خواهم خروجی query شامل یک a و تمام مقادیر متناظرش در col2 باشد(4-5-8).

mannai29
پنج شنبه 14 شهریور 1387, 11:34 صبح
شما می توانید بنویسید مثلا
(select col1,max(col2
from Tbl1
Group by Col1
و یا دستورات دیگر اما باز لازم است بگویم طراحی جداول خود را بازنگری کنید.چون درج رکورد تکراری بر خلاف قواعد نرمال سازی است. و اگر بانک نرمال باشد به چنین مشکلی بر نمی خورید.
موفق باشید.

cache_overflow
پنج شنبه 14 شهریور 1387, 11:45 صبح
خیلی ممنون از جوابتون.
با این روش می توان این کار را کرد ولی در برنامه مقداری را که در max می نویسم را نمی گیرد. احتمالا باید در بخش مربوط به asp.net این مشکل را پیگیری کنم.