在SQL中与CASE逻辑聚合

时间:2017-02-07 13:08:31

标签: sql

我有一张这样的表:

  Client ID Value
  1       1   10
  1       2   20
  2       1   12
  2       2   15
  2       1   34

理想的结果是客户对不同列中的每个ID进行值列(sum)分组的混合:

Client SUM_VALUE_1 SUM_VALUE_2
  1       10          20
  2       46          15

尝试这样做:

Select Client, 
sum (Case When ID='1' THEN Value ELSE NULL END) as SUM_VALUE_1,
sum (Case When ID='2' THEN Value ELSE NULL END) as SUM_VALUE_2
FROM TABLE
GROUP BY Client

这是正确的方法还是应该以某种方式改变?

2 个答案:

答案 0 :(得分:0)

如果您希望按客户端和ID对结果进行分组,则可以执行以下操作:

  Select Client, ID, sum (value) as value
  FROM TABLE
  GROUP BY Client, ID

但如果您想要客户分组:

Select Client,sum(value) from (
  Select Client, ID, sum (value) as value
  FROM TABLE
  GROUP BY Client, ID)
GROUP BY Client;

Select Client,sum(value)
from TABLE
GROUP BY Client;

答案 1 :(得分:0)

我想说避免使用0而不是使用0

Select Client, 
sum (Case When ID='1' THEN Value ELSE 0 END) as SUM_VALUE_1,
sum (Case When ID='2' THEN Value ELSE 0 END) as SUM_VALUE_2
FROM TABLE
GROUP BY Client
相关问题