我目前正在使用SSMS。我正在提取数据,并试图获得两个不同的列,这些列将价格相加。'ChangeSpend‘和'TotalSpend’这两列都引用了同一列,这就是我遇到问题的地方。
我希望ChangeSpend返回每个收据以V.Ch%开头的所有代码的总和(因此它们排除了所有其他代码),并希望TotalSpend返回每个收据的所有代码的总和。
下面是我当前的代码:
SELECT
Receipt
,ReceiptCode
,ReceiptAmount
,sum(ReceiptAmount) over (Partition by Receipt) as TotalSpend
,(CASE WHEN ReceiptCode = 'V.Ch%' then sum(ReceiptAmount)
over (Partition by Receipt)
ELSE 0
END) as ChangeSpend
FROM tableA
LEFT OUTER JOIN tableB
on A.Receipt = B.Receipt
WHERE ReceiptCode LIKE 'V.%'
ORDER BY Receipt但是,我的查询当前打印以下内容:
Receipt ReceiptCode ReceiptAmount TotalSpend ChangeSpend
1 v.cha 5 20 0
1 v.rt 2 20 0
1 v.chb 6 20 0
1 v.abc 7 20 0
2 v.cha 20 21 0
2 v.abc 1 21 0
3 v.cha 4 14 0
3 v.chb 1 14 0
3 v.tye 7 14 0
3 v.chs 2 14 0我想让它打印这个:
Receipt ReceiptCode ReceiptAmount TotalSpend ChangeSpend
1 v.cha 5 20 11
1 v.rt 2 20 11
1 v.chb 6 20 11
1 v.abc 7 20 11
2 v.cha 20 21 20
2 v.abc 1 21 20
3 v.cha 4 14 7
3 v.chb 1 14 7
3 v.tye 7 14 7
3 v.chs 2 14 7谢谢你的帮助
发布于 2017-07-25 21:32:58
你必须把金额放在案例之外,而不是反过来:
SUM(CASE WHEN SomeCondition=true THEN MyColumn ELSE 0 END)发布于 2017-07-25 21:33:42
尝试
,SUM(CASE WHEN ReceiptCode LIKE 'V.Ch%' THEN ReceiptAmount ELSE 0 END)
OVER (Partition by Receipt)
AS ChangeSpend发布于 2017-07-25 21:33:42
SUM(
CASE WHEN ReceiptCode like 'V.Ch%' then ReceiptAmount ELSE 0 END) as ChangeSpendhttps://stackoverflow.com/questions/45304816
复制相似问题