我有一张收费/信用栏目表:
Item | PriceVal | CostVal | CHARGE_CODE
1 5 3 CH
2 8 5 CH
1 -5 -3 CR
3 7 1 CH
4 15 10 CH
1 5 3 CH
我得到了我需要获得NET价格和成本的查询,但我也对NET收费感兴趣。现在我有:
SELECT Item, SUM(PriceVal), SUM(CostVal)
FROM Table
GROUP BY Item
如何使用值
获取另一列COUNT(SUM(CHARGE_CODE=CH)-SUM(CHARGE_CODE=CR))
我很茫然。
答案 0 :(得分:8)
count()将为每个非空的值计数一个,所以我不认为这正是你想要的。计算出来,然后点击
sum(case when charge_code = CH then costval else 0 end)
- sum(case when charge_code = 'CR' then costval else 0 end)
答案 1 :(得分:2)
由于您已经在表格中输入了美元值作为底片,您可以使用简单的公式:
select
Item,
sum(PriceVal),
sum(CostVal),
sum(PriceVal-CostVal)
from Table
group by Item
我不相信你应该减去信用项目,因为它们已经是负数。
如果你真的想要交易的净数量:
select
Item,
sum(PriceVal),
sum(CostVal),
sum(case when charge_code = 'CH' then 1 else 0 end) -
sum(case when charge_code = 'CR' then -1 else 0 end)
from Table
group by Item
或者,如果只有两个收费代码,请替换:
sum(case when charge_code = 'CH' then 1 else -1 end)
为最后一栏。
答案 2 :(得分:0)
不是100%确定你想要什么,但你只能计算某些行:
SELECT COUNT(IF(CHARGE_CODE=CH,1,NULL)) ...
并且类似地对来自某些行的某些值进行求和:
SELECT SUM(IF(CHARGE_CODE=CH,PriceVal,0)) ...