PDA

View Full Version : سوال: استفاده از Group by



hassanf
سه شنبه 05 آذر 1387, 06:46 صبح
سلام

چند تا Table داریم که به هم رابطه دارند (مربوط به فروشگاه) در Query آنها را به هم join می کنم. حال می خواهم کالاهایی که بیشتر از یکبار سفارش داده شده Group by کنم. ولی مشکل اینجاست. که برای اینکار باید تمام فیلدهایی که در Select امده باید در Group by هم بیاید.




Select OrderDetail.*,
Product.*,
dbo.DateMdToShd(OrderDetail.Date) As 'ShamsiOrderDate'
From OrderDetail
Inner join Product
On Product.Id = OrderDetail.Product_Id
Inner join [Order]
On [Order].Id = OrderDetail.Order_Id
Where [Order].Id Not in (Select Order_Id
From PaymentFish) And
[Order].Member_Id = @MemberId
Group by OrderDetail.Product_Id
و

Hamid.Kad
سه شنبه 05 آذر 1387, 11:26 صبح
خوب اگه فقط لازم دارید که یه فیلد به کاربر نشون بدید، اسم بقیه فیلدها رو توی بخش Select نیارید. در هر صورت در این مواقع می تونید از یه تابعی مثل Max توی قسمت Select استفاده کنید که در اینصورت میشه اسم اون فیلد رو جلوی Group by ذکر نکرد. مثلاً اینجوری بنویسید:


select Sno,Max(DNO) from T1 Group by Sno

hassanf
سه شنبه 05 آذر 1387, 12:02 عصر
همه فیلد ها رو می خوام نشون بدم. اگه از Max یا بقیه توابع استفاده کنم یه رکورد فقط نشون میده.

کاری که میخام بکنم نمایش لیستی از خرید هاست که کاربر چند خرید داشته باشه چند تا رکورد هم ثبت میشه. حالا من میخوام لیست کام خرید ها رو نشون بدم که شامل نام کالا , تاریخ ثبت , کد کالا و قیمت کالا است که اگه کاربر چند تا کالای مشابه خریداری کرده باشه رکوردهای تکراری میاد., و من میخام همه رکوردها باشند و فقط به جای اینکه کالاهای تکراری بیاد یکی از هر کدوم بیاد و به تعداد باری که کالا سفارش داده شده.

لطفا راهنمایی کنید.

Elham_gh
سه شنبه 05 آذر 1387, 13:30 عصر
شما با يك select ، مقدار Max را بگيريد و با select ديگري كه ساير اطلاعات رو مي ده join بزنيد

sarkhosh
سه شنبه 05 آذر 1387, 23:07 عصر
همون طور کهelham_gh باید از ساب کوئری استفاده کنید در sqlserver2005 میتوانید از CTEاستفاده کنید

hassanf
چهارشنبه 06 آذر 1387, 04:18 صبح
با Join باز هم ردیف های تکراری می آیند.
میشه کدش رو بنویسید.

sarkhosh
چهارشنبه 06 آذر 1387, 09:53 صبح
در شرط JOIN فیلدهای بیشتری رو بیارید

Elham_gh
چهارشنبه 06 آذر 1387, 10:07 صبح
با Join باز هم ردیف های تکراری می آیند.
میشه کدش رو بنویسید.

اين به اين خاطر است كه فيلدهاي متفاوتشون در ليست SELECT شما نيست. يا فيلدها رو بيشتر كنيد يا در SELECT از DISTINCT استفاده كنيد