Разделите SELECT на несколько столбцов по условию WHERE без создания нескольких строк, вызванных добавлением в GROUP BY - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь разделить SUM (trs_amt) и ВЫБЕРИТЕ его в столбец 'trs_sum', когда trs_trust_code равен 1 или 2, и в столбец 'интереса', когда trs_trust_code = 9. Кажется, я не могу понять, как это сделатьэто без создания дополнительной строки при добавлении trs_trust_code в GROUP BY.Я пробовал CASE в SELECT, CASE в GROUP BY, подзапросы

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

1 Ответ

0 голосов
/ 04 декабря 2018

Пожалуйста, используйте выражение , когда trs_trust_code = 9, затем trs_amt, иначе 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
...