SQL聚合查询和求和列

SQL聚合查询和求和列,sql,sum,aggregate,Sql,Sum,Aggregate,我有这张桌子(我把名字放在需要的柱子上) 我想得到这个: id idc Totidv1 Totidv3 TOT 47 3 300 60 360 47 4 280 0 280 43 2 0 510 510 53 4 480 0 480 29 2 0 510 510 2 2 480 0 480 我能得到的最接近的结果是: SELECT DISTINCT(

我有这张桌子(我把名字放在需要的柱子上)

我想得到这个:

id idc Totidv1 Totidv3 TOT
47   3     300     60  360
47   4     280      0  280
43   2       0    510  510
53   4     480      0  480
29   2       0    510  510
2    2     480      0  480
我能得到的最接近的结果是:

 SELECT DISTINCT(iddip),IDCENTROCOSTO,tot=SUM(VALORE),ord=( SELECT SUM(isnull(VALORE,0)) FROM VALORIVOCICDC WHERE IDVOCE='1' and iddip=v.IDDIP and IDCENTROCOSTO ='3' GROUP BY iddip,IDCENTROCOSTO),
  str=( SELECT SUM(isnull(VALORE,0)) FROM VALORIVOCICDC WHERE IDVOCE='3' and iddip=v.IDDIP and IDCENTROCOSTO ='3' GROUP BY iddip,IDCENTROCOSTO)
FROM VALORIVOCICDC v
GROUP BY v.iddip,IDCENTROCOSTO

但它在totidv1和totisv3中返回了错误的总和,我该怎么做呢?感谢您提供的任何提示

您只需要在此处列出一个组(不明确)和几个案例说明:

SELECT
    id,
    idc,
    SUM(CASE WHEN idv=3 THEN idv ELSE 0 END) as totidv1,
    SUM(CASE WHEN idv=1 THEN idv ELSE 0 END) as totidv3,
    SUM(idv) as Tot
FROM yourtable
GROUP BY id, idc

请注意,
Distinct
不是一个可以像
selectdistinct(somecolumn)
那样调用的函数,这在功能上等同于
selectdistinct somecolumn…
,因为它对SELECT语句返回的整个记录集都有效。

您是我的英雄,我在这件事上浪费了一天的时间,解决方案是如此简单和优雅。。。谢谢您!我会尽力把你的答案记为正确答案
SELECT
    id,
    idc,
    SUM(CASE WHEN idv=3 THEN idv ELSE 0 END) as totidv1,
    SUM(CASE WHEN idv=1 THEN idv ELSE 0 END) as totidv3,
    SUM(idv) as Tot
FROM yourtable
GROUP BY id, idc