简体   繁体   English

SQL Server SUM,但按另一列进行聚合

[英]SQL Server SUM, but aggregating by another column

I'm using the following SQL query to sum all payment types from my projects: 我正在使用以下SQL查询来汇总项目中的所有付款类型:

SELECT 
    SUM(E2_SALDO) as SUM,
    E2_ITEMD as PROJECT,
    E2_ZFORPG AS TYPE 
FROM 
    SE2010 
WHERE 
    D_E_L_E_T_ = ''
    AND E2_NUM BETWEEN '' AND 'ZZZZZZZZZZZZZZZ' 
    AND E2_PREFIXO BETWEEN '' AND 'ZZZ' 
    AND E2_NATUREZ BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_VENCREA BETWEEN '20140901' AND '20140915'
    AND E2_PORTADO BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_FORNECE BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_EMISSAO BETWEEN '20000101' AND '20201231'
    AND E2_ZFORPG BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_ZTPED BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_SALDO> 0  and E2_TIPO<>'PR' AND E2_ITEMD BETWEEN '' AND 'ZZZZZZZZZZZZZ' 
GROUP BY 
    E2_ITEMD, E2_ZFORPG

My result looks like this 我的结果看起来像这样

SUM         PROJECT    TYPE
-----------------------------
848,15      F140319               
7296,36     H1008       DOC          
14534,02    H1008       TED          
36041,33    K0104       BOL       
11127,91    F140363     CAM       
84841,43    H1008       CAM       
500                     CHQ       
1600        K0309       CHQ       
4124,91                 DEB       
200         F130702     DOC       
3394,64     H1001       DOC       
7674,54     H1001       TED     

That's almost it, but I want to "combine" some results, for example I want all costs for projects starting with "H" to be together, like this: 差不多了,但是我想“合并”一些结果,例如,我希望以“ H”开头的项目的所有成本都在一起,例如:

SUM         PROJECT      TYPE
------------------------------
10691       H1001,H1008   DOC       
22208,56    H1001,H1008   TED       
84841,43    H1008         CAM       

So, in this example, it grouped all DOC payment types for everything on "H" projects (1st line), grouped all "TED" payment types (2nd line) and also show projects alone when there is no other project (3rd line, because there is no "H1001 CAM" anywhere) 因此,在此示例中,它将“ H”项目(第一行)中所有内容的所有DOC付款类型分组,对所有“ TED”付款类型(第二行)进行分组,并且在没有其他项目时单独显示项目(第三行,因为任何地方都没有“ H1001 CAM”)

If possible, I would like to manually inform somewhere the group types, because sometimes I want to have "H" and "K" projects together, so I would like to inform the "groups" in a ( ) , like in a "WHERE TYPE IN ("first","second") 如果可能的话,我想在某个地方手动通知组类型,因为有时我想同时拥有“ H”和“ K”项目,所以我想在()中通知“组”,就像在“ WHERE”中那样TYPE IN(“第一”,“第二”)

Thank you! 谢谢!

Edit: Running Microsoft SQL Server 2008 R2 编辑:运行Microsoft SQL Server 2008 R2

SELECT
    SUM(E2_SALDO) AS sum,
    E2_ITEMD =
    STUFF((
        SELECT
            ', ' + E2_ITEMD
        FROM
            SE2010 b
        WHERE
            b.E2_ITEMD = a.E2_ITEMD 
            AND b.E2_ITEMD LIKE '['+@yourProjectNameStartCharacters + ']%'-- H if only starting with H, HK if you want starting with h and k
        FOR xml PATH ('')), 1, 2, ''),
    E2_ZFORPG 
FROM
    SE2010
WHERE
    D_E_L_E_T_ = ''
    AND E2_NUM BETWEEN '' AND 'ZZZZZZZZZZZZZZZ'
    AND E2_PREFIXO BETWEEN '' AND 'ZZZ'
    AND E2_NATUREZ BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_VENCREA BETWEEN '20140901' AND '20140915'
    AND E2_PORTADO BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_FORNECE BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_EMISSAO BETWEEN '20000101' AND '20201231'
    AND E2_ZFORPG BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_ZTPED BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_SALDO > 0
    AND E2_TIPO <> 'PR'
    AND E2_ITEMD BETWEEN '' AND 'ZZZZZZZZZZZZZ'
    AND E2_ITEMD LIKE '['+@yourProjectNameStartCharacters + ']%'-- H if only starting with H, HK if you want starting with h and k
GROUP BY
    E2_ZFORPG

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

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