Условное сопоставление имен столбцов со значениями строк - PullRequest
0 голосов
/ 07 апреля 2019

Предположим, что у нас есть таблица, в которой у нас есть одно поле для почтового индекса, а остальные - двоичные поля (1 или NULL) с именами, соответствующими различным местам.Например, в представлении таблицы есть 201 поле, причем первое поле под названием «почтовый индекс» содержит почтовые индексы, а последнее - 200 полей двоичных значений с названиями городов: Чикаго, Нью-Йорк, Хьюстон и т. Д.

Предположим, чтоэта строка содержит почтовый индекс 11373. Хотя можно использовать coalesce, чтобы найти первое ненулевое значение и вернуть «Нью-Йорк», также может быть истинным другое значение, например «Elmhurst».

zip_code  new_york  chicago  elmhurst  dover  maspeth
10001        1        NULL     NULL    NULL    NULL
07801       NULL      NULL     NULL     1      NULL
11373        1        NULL      1      NULL     1

Цельчтобы сопоставить имена столбцов с каждым соответствующим почтовым индексом и получить вывод примерно так:

zip_code    city
 10001     new_york
 07801     dover
 11373     new_york
 11373     elmhurst
 11373     maspeth

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Один метод использует union all:

select zip_code, 'New York' as city from t where new_york = 1
union all
select zip_code, 'Chicago' as city from t where chicago = 1
union all
. . .
0 голосов
/ 07 апреля 2019

Это отличный пример использования SQL UNPIVOT:

SELECT unpvt.*
FROM 
    #x UNPIVOT (v FOR statename IN (new_york, chicago,elmhurst, dover, maspeth)) AS unpvt
...