Как преобразовать столбцы в строки - PullRequest
0 голосов
/ 05 августа 2020

У меня вопрос.

В SQL есть таблица, которую я должен закодировать с идентификатором претензии с множественным кодом ошибки. Таким образом, это выглядит следующим образом:

ClaimID    Error1  Error2  Error3 Error4
1234       300     301     302     303

, и я хочу, чтобы ошибка отображалась в отдельных строках, например

ClaimID  Error
1234     300
1234     301
1234     302
1234     303

Как мне закодировать это в SQL? спасибо

1 Ответ

2 голосов
/ 05 августа 2020

Вы хотите развернуть строки в столбец. Лучшее решение зависит от используемой базы данных. Подход с несколькими базами данных: union all:

select claimID, error1 as error from mytable
union all select claimID, error2 from mytable
union all select claimID, error3 from mytable
union all select claimID, error4 from mytable

В базах данных, поддерживающих боковые соединения и конструктор values() строк, есть лучшие варианты, которые не требуют сканирования таблицы несколько раз.

В Postgres:

select x.*
from mytable t
cross join lateral (values 
    (t.claimID, t.error1),
    (t.claimID, t.error2),
    (t.claimID, t.error3),
    (t.claimID, t.error4)
) as x(claimID, error)

На SQL сервере вы просто замените cross join lateral на cross apply.

...