# پایگاه‌های داده > SQL Server > T-SQL >  مکشل با عدم نمایش سطر تکراری برا اساس یک فیلد و نمایش تمامی فیلد ها در جواب

## ali-akbar

با سلام
من مشکلم اینکه معلوم نیس با توجه به join تعداد فیلد هام چند تا است و فقط میخوام disinct برا روی یک فیلد اعمال بشه و در جواب همه فیلد هار ا ببینم که تکرار بر اساس اون فیلد هم اعمال بشه در هر حالی امتحان کردم فقط فیلد city در جواب میاد
یه همچین دستوری که خب این جواب نمیده 
select * ,distinct(city)   from Customers

----------


## golbafan

جداول و کوئری هاتون رو کاملتر بزارید ببینیم مشکل از کجاست
اینطوری نمیشه درست نظر داد

----------


## ali-akbar

اقا مرسی از لطفت
شما بیا اینجا
http://www.w3schools.com/sql/trysql....elect_distinct
مثلا روی فیلد city  میخوام تکراری ها حذف بشن ولی در جواب همه  فیلد ها را نمایش بده

----------


## jamal_ch

سلام

SELECT * FROM Customers where city in (select distinct city from Customers );

----------


## ali-akbar

سلام و تشکر
اما  اینکه شهر های تکراری را حذف نمیکنه با همین روال اما شهرهای تکراری حذف بشن

----------


## مهدی نان شکری

با سلام
شما در جدولتان فرض کنید سه فیلد دارید با نام های A,B,C، اگر فرض بر این شود که روی فیلد C تکراری ها حذف شود نتیجه حالت زیر چه خواهد بود؟
َA,B,C
1,1,1
2,1,1
3,2,1

----------


## ali-akbar

تشکر خوب در این صورت کوری نال برمیگردد اما مثال من همون لینکی هس که قرار دادم و اینطور که شما میگید نمیشه میخوام شهرهای تکراری را حذف کنه حالا با هر اولویت که فرقی نمیکنه ولی بقیه فیلد ها در جواب نمایش بده نیاد فقط city  را نمایش بده

----------


## مهدی نان شکری

فرض کنید شما در جدول اشخاص دو رکورد دارید
مهدی نان شکری / تهران
علی اکبر / تهران
حالا اگر شهر تکراری حذف بشود با شرط وجود نام در نتیجه خروجی چطور باید باشه؟ این اساس نظام پایگاه داده رو زیر سوال نمی بره؟

----------


## ali-akbar

ای بابا چیکار داریم به پایگاه داده و اساسش من این کوری را برای کاری احتیاج دارم یکی از رکورد ها را نمایش بده کافی برام در کل کارم با این دیتابیس نیس من تا سوال کردم دوستان گفتن دیتا بیس چه جوره منم گفتم این مثال

----------


## SabaSabouhi

> ای بابا چیکار داریم به پایگاه داده و اساسش من این کوری را برای کاری احتیاج دارم یکی از رکورد ها را نمایش بده کافی برام در کل کارم با این دیتابیس نیس من تا سوال کردم دوستان گفتن دیتا بیس چه جوره منم گفتم این مثال


سلام
شما تو پرسش نوشتی: select *, distinct( city) from customers 
خوب این شدنی نیست. دوست خوبمون NanShekari با مثال برات توضیح داد که این نمی‌شه که شما یک شهر رو بدون تکرار و در کنار باقی اطلاعات بیاری
اگه فقط فهرست شهر‌ها رو می‌خوای باید اون «*» رو حذف کنی ( تمام مشکل بابت همون «*» هست )
به این شکل فقط فهرست شهرهایی رو خواهی داشت که تو جدول customers وجود دارن.
اما اگه «*» وجود داشته باشه در هر صورت تمام سطرهای جدول مشتریان رو در خروجی خواهی دید.

صبا صبوحی

----------


## ali-akbar

سلام فرض کنید شما یه گزارش گرفتی حالا توی اون فردی هست که برای اقای x کار کرده و برای اقای Y هم کار کرده این میاد توی جواب کوری 
خوب این شخص ای دیش تکرار شده شمارش همینطور اسمش همینطور حالا میخواهیم بر اساس این گزارش پیامک ارسال کنیم خوب تکراری توش زیاده چه طور حذف کنیم

----------


## SabaSabouhi

> سلام فرض کنید شما یه گزارش گرفتی حالا توی اون فردی هست که برای اقای x کار کرده و برای اقای Y هم کار کرده این میاد توی جواب کوری 
> خوب این شخص ای دیش تکرار شده شمارش همینطور اسمش همینطور حالا میخواهیم بر اساس این گزارش پیامک ارسال کنیم خوب تکراری توش زیاده چه طور حذف کنیم


سلام
من که تو پست قبلی برات نوشتم. راه حل حذف اطلاعات اضافی هست.
می‌خوای برای این شخص پیام کوتاه ارسال کنی، پس تو query فقط نیاز به نام شخص و شماره موبایلش داری، فقط همین دو فیلد رو تو select بیار. در این حالت distinct دقیقاً 
کاری می‌کنه که مورد نظرت هست.
بعضی وقت‌ها لازمه برای چند تا کار چند تا query مختلف داشته باشیم. برای این منظور که شما داری، یک query ساده لازم داری که مثلاً همین دو ستون رو داشته باشه.

صبا صبوحی

----------


## hamedjim

دوستان سلام. در همین زمینه من هم مشکل مشابهی دارم.
برای توضیح دادنش از همین مثال شهر استفاده می کنم.
فرض کنید فیلدهای ما اینها هستند:
نام شهر (City)، جمعیت شهر (Population)، مساحت شهر (Area)، نام مشتری (CustomerName)، شماره مشتری (CustomerPhone)
و فرض کنید دیتای ما به این صورت هست:
تهران
12000
123
Ali
456

تهران
12000
123
Reza
789

مشهد
5000
125
Ali
358

تهران
12000
123
X
012

مشهد
5000
125
Y
354



همون طور که می بینید سه تا فیلد اول برای تمام مشتریان یک شهر ثابت هست.
من نیاز دارم تا خروجی به شکل زیر داشته باشم:
تهران
12000
123

مشهد
5000
125






بنابراین همون طور که می دونیم distinct برای نمایش بیشتر از یک فیلد استفاده نمیشه.
چه راه حلی برای این موضوع هست؟ :متفکر:

----------


## hamid_hr

select distinct city,Population,Area from tblcity
یا
select city,Population,Area from tblcity group by city,Population,Area

----------


## hamedjim

حمید عزیز، ممنون از راهنمایی. اون مشکل رفع شد.

اما یه سوال دیگه:

فرض کنید لیستی از فروشندگان داریم که چند محصول خاص رو می فروشند (مثلا سیب، گلابی، هلو) به این صورت که جدول شامل سریال فروش، نام فروشنده، مبلغ فروش سیب، مبلغ فروش گلابی و مبلغ فروش هلو باشه.
در یک گزارش می خوام برای هر فروشنده به تفکیک جمع فروش هر محصول و همچنین فروش کل رو به شکل زیر لیست کنم:

نام فروشنده
فروش سیب

فروش گلابی

فروش هلو

فروش کل


علی
2500
2300
0
4800

رضا
5000
0
8000
13000

حسین
3000
3000
3000
9000



کد SQL برای این حالت چطوری نوشته میشه؟ با همین کامند GROUP BY میشه این رو نوشت؟

----------


## narges1369

سلام جناب مشکل بالارو چطور حل کردید من با راهنمایی های دوستمون مشکلم حل نشد

----------


## Mahmoud.Afrad

> سلام جناب مشکل بالارو چطور حل کردید من با راهنمایی های دوستمون مشکلم حل نشد


کدوم مشکل؟ شما سوال خودت رو همراه اسکریپت جدول بزار.

----------

