简体   繁体   English

SQL聚合查询和总和列

[英]SQL aggregation query and sum columns

I have this table (I put the name over needed colums) 我有这张桌子(我把名字放在了需要的栏上)

iddip         date                 idv idc  val
47    2018-06-01 00:00:00.000   0   3   3   60  NULL    NULL
47    2018-06-01 00:00:00.000   0   1   3   200 NULL    NULL
47    2018-06-01 00:00:00.000   0   1   4   280 NULL    NULL
43    2018-06-01 00:00:00.000   0   3   2   510 NULL    NULL
53    2018-06-01 00:00:00.000   0   1   4   480 NULL    NULL
29    2018-06-01 00:00:00.000   0   3   2   510 NULL    NULL
2     2018-06-11 00:00:00.000   0   1   2   480 NULL    NULL
47    2018-06-02 00:00:00.000   0   1   3   100 NULL    NULL

I want to obtain this: 我想获得这个:

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

The closest I can get is: 我能得到的最接近的是:

 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

But it returns wrong sums in totidv1 and totisv3, How can I do this? 但是它在totidv1和totisv3中返回错误的总和,我该怎么做? Thanks for any hint 谢谢你的提示

You just need a GROUP BY here (not distinct) and a couple of CASE statements: 您只需要这里的GROUP BY(没有区别)和几个CASE语句:

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

Note that Distinct is not a function that you can call like SELECT DISTINCT(somecolumn) This is functionally equivalent to SELECT DISTINCT somecolumn... in that it works against the entire record set returned by the SELECT statement either way. 请注意, Distinct不是像SELECT DISTINCT(somecolumn)那样可以调用的函数,它在功能上等效于SELECT DISTINCT somecolumn... ,因为它对SELECT语句返回的整个记录​​集都有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM