SQL - Count()问题

时间:2009-02-06 00:02:51

标签: sql sql-server tsql

我有一张收费/信用栏目表:

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))

我很茫然。

3 个答案:

答案 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)) ...