2014-07-08 64 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