2014-07-08 119 views
-1

我有這個疑問:SQL SUM問題

Select  Denumire,Sum(Livrari.Cantitate)as Stoc, 
      isnull(Sum(Facturi_Emise.Cantitate),0) as 'Sold', 
      isnull(Sum(Livrari.Cantitate),0)-isnull(sum(Facturi_Emise.Cantitate),0) As 'Stoc After Sales', 
      Livrari.Id_Depozit 

From  Livrari 
Left join Produse On Livrari.Id_Produs=Produse.Id_Produs 
Left join Facturi_Emise On Produse.Id_Produs=Facturi_Emise.Id_Produs 

group by Denumire, Livrari.Id_Depozit 
order by Denumire 

我需要的股票,所需出售的物品的數量,和我在2個存款拿到後物品的價格。但在「Livrari」表中,我在兩種存款中都得到了相同的物品,存款1的金額爲300,存款2的金額爲300,當我通過Id_Depozit進行金額和分組時,我得到的金額爲600存款1和600存款2,對於表Facutri_Emise也是如此,因爲我應該從存款1中只取250件物品,存款2只取300件,兩次存款都需要550(250 + 300),並且我在每次銷售50後獲得了Stoc器,代替50存款1和0存款2.

fiddle

我的問題是結果在8行和第9(這意味着Pahare)在柱STOC應爲300對於每個。在下一列Sold中,第8行應該是250,第9行是300.最後,在Sale之後的Stoc列應該是差異,因爲第8行= 50行第9行= 0。 我的意思是每次產品重複時,我的查詢都會將這筆款項存入存款1和存款2中,因爲我爲每筆存款提供不同的值,因此應向我顯示相應的值。如果物品(比如說蘋果)存入存款1,另一供應商將存入另一個蘋果,那麼供應商將帶來一定數量的存款2.當客戶爲該客戶制定賬單(「Facturi_Emise」)時,我應該將一定數量的蘋果從存款1和另一個存款2,我想看看在一個存款中剩餘的金額是多少,剩下的存在於另一個存款中。

+1

剛剛與模式設計在此處鍵入一些示例數據。 –

+0

輸出 - 「Facturi_Emise」(Id_Factura(PK),CNP(FK),Id_Produs(FK),Cantitate(Quantity),Id_Depozit) 1/1750130120056/5/21/1 2/1870823130025/3/32/1 3/************/7/250/1 4/************/2/55/2 5/****** ******/12/5/1 6/************/5/10/1 7/************/11/1 8/************/7/2 9/************/6/2 輸入 - 「Livrari」(Id_Livrare(PK ),Id_Furnizor(FK),Id_Produs(FK),Cantitate(數量),Id_Depozit(FK) –

+0

你還缺開始的數據表的價值。我們能得到想要的結果的一個實際的表呢,我們傾向於選擇樣本數據爲文本格式以便於複製@Tanner - 只要至少有一個非空值,SUM(。 ..)''實際上[忽略'null'值](http://sqlfiddle.com/#!3/d41d8/36386/0),所以這不是必需的。 –

回答

0

它在這裏。 它不是按保證金號碼排序,但它是okey。

SELECT Produse.Denumire, 
Isnull(a.suma,0) AS Intrari, 
Isnull(b.suma,0) AS Iesiri, 
isnull(a.suma,0) - isnull(b.suma,0) AS Stoc 
FROM Produse 
LEFT JOIN 
(SELECT ID_Produs, Sum(Cantitate) AS suma FROM Livrari GROUP BY ID_Produs) 
AS a 
ON Produse.ID_Produs = a.ID_Produs 
LEFT JOIN 
(SELECT ID_Produs, Sum(Cantitate) AS suma FROM Facturi_Emise GROUP BY ID_Produs) 
AS b 
ON Produse.ID_Produs = b.ID_Produs 

SOLLUTION

-1
Select  Denumire,Sum(Livrari.Cantitate)as Stoc, 
      SUM(ISNULL(Facturi_Emise.Cantitate,0)) as 'Sold', 
      SUM(ISNULL(Livrari.Cantitate,0))-SUM(ISNULL(Facturi_Emise.Cantitate,0)) As 'Stoc After Sales', 
      Livrari.Id_Depozit 

From  Livrari 
Left join Produse On Livrari.Id_Produs=Produse.Id_Produs 
Left join Facturi_Emise On Produse.Id_Produs=Facturi_Emise.Id_Produs 

和Livrari.Id_Depozit = Facturi_Emise.Id_Depozit 組由Denumire,通過Denumire

Livrari.Id_Depozit 爲了你需要和之前ceck空,洙第一ISNULL再總結。 如果你SUM和一個是null,那麼所有SUM將爲空。

+0

http://sqlfiddle.com/#!3/811f5/3我的問題仍然沒有解決。 –

+0

這不是真的,請看這裏:http://sqlfiddle.com/#!3/d41d8/36386/0 – Tanner