将SELECT按WHERE条件分隔成多列,不会因为加到GROUP BY造成多行

Separate SELECT into multiple columns by WHERE condition without creating multiple rows caused by adding to GROUP BY

当 trs_trust_code 为 1 或 2 时,我试图将 SUM( trs_amt ) 和 SELECT 拆分为 'trs_sum' 列,并拆分为 [= trs_trust_code = 9 时的 15=] 列。在将 trs_trust_code 添加到 GROUP BY 时,我似乎无法弄清楚如何在不创建额外行的情况下做到这一点。我在 SELECT 中尝试过一个 CASE,在 GROUP BY 中尝试过一个 CASE,子查询

SELECT
    trs_desk,
    dsk_name,
    DATEPART( YEAR, DATEADD( DAY, trs_trx_date, '1600-12-31' ) ) as 'year',
    DATEPART( MONTH, DATEADD( DAY, trs_trx_date, '1600-12-31' ) ) as 'month',
    COUNT( DISTINCT trs_amt ) AS 'trs_count',
    SUM( trs_amt ) AS 'trs_sum',
    SUM( trs_comm_amt ) AS 'trs_comm_sum'
FROM cds.trs
JOIN cds.dsk on dsk_code = trs_desk
WHERE trs_desk IN ( 'ACE' )
AND trs_trust_code IN ('1','2','9')
GROUP BY trs_desk, year, month, dsk_name
ORDER BY trs_desk ASC, year DESC, month DESC

求和时请使用表达式case when trs_trust_code = 9 then trs_amt else 0 end。例如像这样:

SELECT
    trs_desk,
    dsk_name,
    DATEPART( YEAR, DATEADD( DAY, trs_trx_date, '1600-12-31' ) ) as 'year',
    DATEPART( MONTH, DATEADD( DAY, trs_trx_date, '1600-12-31' ) ) as 'month',
    COUNT( DISTINCT trs_amt ) AS 'trs_count',
    SUM( case when trs_trust_code = 1 or trs_trust_code = 2 then trs_amt else 0 end ) AS 'trs_sum',
    SUM( case when trs_trust_code = 9 then trs_amt else 0 end ) AS 'interest',
    SUM( trs_comm_amt ) AS 'trs_comm_sum'
FROM cds.trs
JOIN cds.dsk on dsk_code = trs_desk
WHERE trs_desk IN ( 'ACE' )
AND trs_trust_code IN ('1','2','9')
GROUP BY trs_desk, year, month, dsk_name
ORDER BY trs_desk ASC, year DESC, month DESC