PDA

View Full Version : مشکل در نوشتن کوئری موجودی انبار در برنامه انبار داری



farazjalili
چهارشنبه 19 تیر 1392, 20:36 عصر
با سلام به دوستان عزیز من یک مشکلی در نمایش موجودی کالاهای انبار دارم
من برای کالاهای ورودی انبار یک جدول و برای کالاهای خروجی انبار یک جدول دیگر دارم و برای نمایش موجودی انبار از کوئری زیر استفاده می کنم مشکل ایجا هست که اگر یک کالا فقط در یکی از جدول ها رکورد داشته باشد در خروجی کوئری آن کالا نشان داده نمی شود ؟!
SELECT Product.Name,Product.Model,
SUM(Product_Entry.[Count])-SUM(Product_Quit.[Count])
FROM Product
INNER JOIN Product_Entry ON Product_Entry.Product_Id=Product.ProductId
INNER JOIN Product_Quit ON Product_Quit.Product_Id=Product.ProductId
GROUP BY Product.ProductId,Product.Name,Product.Model

مهدی هادیان2
پنج شنبه 20 تیر 1392, 00:16 صبح
بسم الله الرحمن الرحیم
با سلام
به جای SUM(Product_Entry.[Count]) از SUM(ISNULL(Product_Entry.[Count],0)) استفاده کنید که در صورت وجود نداشتن 0 محاسبه شود؛ در موارد مشابه هم همین کار رو انجام دهید.
موفق باشید.

farazjalili
سه شنبه 08 مرداد 1392, 09:45 صبح
سلام از این کد هم استفاده کردم ولی باز جواب نداد (در حالی که محصول دارم هیچ رکوردی را نشان نمی دهد . )

محمد سلیم آبادی
سه شنبه 08 مرداد 1392, 13:21 عصر
INNER JOIN ها را تبدیل به LEFT JOIN کنید. و در SELECT از تابع ISNULL برای تبدیل مقدار NULL به 0 استفاده کنید (همانطور که در پست قبل اشاره شد) تا نتیجه صحیح بدست بیاد. به این شکل:
SELECT Product.Name,Product.Model,
ISNULL(SUM(Product_Entry.[Count]),0)-ISNULL(SUM(Product_Quit.[Count]),0)
FROM Product
LEFT JOIN Product_Entry ON Product_Entry.Product_Id=Product.ProductId
LEFT JOIN Product_Quit ON Product_Quit.Product_Id=Product.ProductId
GROUP BY Product.ProductId,Product.Name,Product.Model

البته من شک دارم query فوق که شما نوشته اید نتیجه صحیح ای رو بده. اگر نتیجه مورد نظر نبود این query را اجرا کنید:
SELECT Product.Name,Product.Model,
ISNULL(D1.total, 0) - ISNULL(D2.total, 0)
FROM Product P
LEFT JOIN
(SELECT Product_Id, SUM([Count]) AS total
FROM Product_Entry
GROUP BY Product_ID) D1
ON D1.Product_Id=P.ProductId
LEFT JOIN
(SELECT Product_Id, SUM([Count]) AS total
FROM Product_Quit
GROUP BY Product_ID) D2
ON D2.Product_Id=P.ProductId;