Как сжать результаты в одну строку, используя предложение CASE? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь использовать предложение CASE и пытаюсь сжать результаты в одну строку. Теперь мои данные возвращаются вот так.

asset_id    ID_ISIN          ID_SEDOL     ID_CUSIP
131218      NULL             NULL         NULL
131218      NULL             2450915      NULL
131218      NULL             NULL         448814DM2
131218      NULL             NULL         448814DM2
131218      NA-000K0VF05-4   NULL         NULL
131218      NULL             2450915      NULL

Я действительно хочу это увидеть.

asset_id    ID_ISIN          ID_SEDOL     ID_CUSIP
131218      NA-000K0VF05-4   2450915      448814DM2

Вот SQL, который я тестирую.

SELECT CW.asset_id,
CASE WHEN CW.id_cd = 'ISN' THEN CW.id_number ELSE NULL END As ID_ISIN,
CASE WHEN CW.id_cd = 'SED' THEN CW.id_number ELSE NULL END As ID_SEDOL,
CASE WHEN CW.id_cd = 'CSP' THEN CW.id_number ELSE NULL END As ID_CUSIP
FROM CPDG As CPDG
INNER JOIN CW As CW
ON CPDG.asset_id = CW.asset_id
WHERE CW.asset_id = '131218'

1 Ответ

4 голосов
/ 07 ноября 2019

Требуется агрегация:

SELECT CW.asset_id,
       MAX(CASE WHEN CW.id_cd = 'ISN' THEN CW.id_number END) As ID_ISIN,
       MAX(CASE WHEN CW.id_cd = 'SED' THEN CW.id_number END) As ID_SEDOL,
       MAX(CASE WHEN CW.id_cd = 'CSP' THEN CW.id_number END) As ID_CUSIP
FROM CPDG CPDG INNER JOIN
     CW CW
     ON CPDG.asset_id = CW.asset_id
WHERE CW.asset_id = '131218'
GROUP BY CW.asset_id;

Примечание. Я удалил ELSE NULL, поскольку это избыточно. Кроме того, если asset_id - это число (что, я подозреваю, так и есть), удалите одинарные кавычки из сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...