使用group by并对列进行求和

时间:2015-11-01 11:29:52

标签: sql sql-server

我在一个表中有以下日期

Id     Side    Quant
ABC    B       10
ABC    S       5
ABC    B       2
XYZ    B       3
XYZ    B       1
MNO    S       6

我希望有一个按ID分组并对数量求和的查询。当总和Side等于S的数量时,需要减去数量(因此为负值)。结果应如下所示,

ID    Quant
ABC   7
XYZ   4
MNO   -6

我知道我可以做类似下面的事情,但不知道如何处理等于S必须为负数的Sides?

select ID, Sum(Quant) TotalQuant from tblOrders
group by ID, Quant

1 个答案:

答案 0 :(得分:1)

您可以使用CASE WHEN来否定数字:

SELECT ID,
   SUM(CASE WHEN Side = 'S' THEN -Quant ELSE Quant END) AS TotalQuant
FROM tblOrders
GROUP BY ID

LiveDemo

使用 SQL Server 2012 + ,您可以使用 IIF 功能

SELECT ID,
   SUM(IIF(Side = 'S', -Quant, Quant)) AS TotalQuant
FROM tblOrders
GROUP BY ID