Слияние и случай, когда заявление для Postgres 9,6 - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь заполнить некоторые данные.Столбец А в этой таблице может быть из таблицы кратных, и я могу использовать для нее функцию объединения.Если coalesce возвращает значение NULL, мне нужно перейти к другой таблице, и на основе значения из этой таблицы мне нужно вставить жестко закодированное значение в этот столбец.

Backfill Table - T1
Backfill Column - Column A

Coalesce Tables - TC2, TC3, TC4, TC5,TC6
Coalesce Columns - TC2.C2, TC3.C3, TC4.C4, TC5.C5,TC6.C6

Another Table - AT1
Another Column - CAT1

If CAT1 = 21, then Column A should be 100
If CAT1 = 22, then Column A should be 200
If CAT1 = 23, then Column A should be 300
If CAT1 = 24, then Column A should be 400

Предположим, есть несколько столбцов для обратной засыпки, а непоказывая здесь.

INSERT INTO TABLE T1 (COLUMN A)
SELECT
coalesce (TC2.C2, TC3.C3, TC4.C4, TC5.C5,TC6.C6),
',
',
'
FROM A JOIN TC2 blah blah;

Я просто не уверен, как включить условия или операторы case для таблицы AT1.

Редактировать: Я спрашиваю об операторе case в операторе coalesce.

1 Ответ

1 голос
/ 11 июня 2019
INSERT INTO TABLE T1 (COLUMN A)
    CASE 
        WHEN (SELECT coalesce (TC2.C2, TC3.C3, TC4.C4, TC5.C5,TC6.C6)) IS NOT NULL
        THEN  (SELECT coalesce (TC2.C2, TC3.C3, TC4.C4, TC5.C5,TC6.C6))
        WHEN AT1.CAT1 = '21' THEN '100'
        WHEN AT1.CAT1 = '22' THEN '200'
        WHEN AT1.CAT1 = '23' THEN '300'
        WHEN AT1.CAT1 = '24' THEN '400'
    END AS NEW_COLUMN_VALUE
...