PDA

View Full Version : از هر کالا چند تا فروش رفته؟



Developer Programmer
یک شنبه 27 تیر 1389, 10:05 صبح
جداول ساده شده برنامه به این صورتن:

FoodGroup
-------------
GroupID
GroupName


Food
---------
GroupID (fk)
FoodID
FoodName


Factor
-----------
FactorID
BillDate


FactorDetail
-------------
FactorID (fk)
FoodID
Qty



میخوام بگم از هر کالا در فلان تاریخ، چقدر فروش رفته.
میدونم که اول باید تمام فاکتورهای اون تاریخ رو بدست بیارم و بعد با Group by FoodID بگم از هر کالا چند تا فروش رفته.

ولی Query اش رو نمی تونم پیاده کنم.

محمد سلیم آبادی
یک شنبه 27 تیر 1389, 11:23 صبح
1. FactorID ها را محدود به اون تاریخ خاص می کنید.
2. نتیجه حاصله را با جدول FactorDetail اتصال میدین.
3. گروه بندی می کنید بر اساس FoodID و Count اش را می گیرین.
4. دوباره نتیجه را با جدول Foods اتصال می دین تا نام غذا نیز بدست آید.



SELECT FoodName, Cnt
FROM Food F
JOIN
(
SELECT FoodID, SUM(Qty) AS Cnt
FROM
(
SELECT FactorID
FROM Factors
WHERE BillDate = YourDateTime
) AS D
JOIN
FactorDetail F
ON F.FactorID = D.FactorID
GROUP BY FoodID
) AS D
ON F.FoodID = D.FoodID;

Developer Programmer
یک شنبه 27 تیر 1389, 21:42 عصر
با سپاس از زحمتی که کشیدین من هم از جدول موقت استفاده کردم.

Set NoCount ON;
IF OBJECT_ID('MyTemp','U') is not null
Drop table myTemp;
Select BillDate,Qty,FoodName,GroupName,D.FoodID
Into myTemp
From Factor f
Inner join FactorDetail d on f.FactorID=d.FactorID
Inner Join Food on food.FoodID=d.FoodID
Inner Join FoodGroup g on Food.GroupID=G.GroupID
Where BillDate <='1389/04/27'

Select Sum(Qty) as Total,FoodID,FoodName,GroupName
From myTemp
Group by FoodID,FoodName,GroupName

محمد سلیم آبادی
شنبه 02 مرداد 1389, 00:28 صبح
1. این جدول دائمی است نه موقت.
2. نیازی به این کار وجود نداره. یعنی بعد از ماده ی WHERE کوئری گروه بندی انجام بدین. پیشنهاد می کنم به بحث Logical Order در Query مراجعه کنید.