SQL - Как транспонировать или поворачивать столбцы из разных таблиц - PullRequest
0 голосов
/ 14 февраля 2019

Таблица 1:

Primary_Key | City | Zip
1           | A    | A
2           | C    | D

Примечание: замаскированное значение в поле City или Zip может быть одинаковым, в этом примере «A» будет отображаться как в City, так и в Zip.

Таблица 2:

Col_Name | Lookup_Key | Value
City     | A          |Seattle
Zip      | A          |70895
City     | C          |Chicago
Zip      | D          |60604

Я хочу создать третью таблицу на основе таблицы 1 и таблицы 2, чтобы получить ее ниже:

Primary_Key | City    | Zip
1           | Seattle | 70895
2           | Chicago | 60604

Может кто-нибудь помочьнаписать SQL, который может вернуть выше результат?В реальной таблице записей намного больше, чем в этом примере.

(Я не уверен, отражает ли название вопроса то, что я на самом деле спрашиваю, пожалуйста, поделитесь, если у вас есть лучшее предложение названия вопроса)

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я настоятельно рекомендую два объединения:

SELECT t1.Primary_Key, tc.Value as City, tz.Value as Zip
FROM table1 t1 LEFT JOIN
     table2 tc
     ON tc.Lookup_Key = t1.City AND tc.col_name = 'City' LEFT JOIN
     table2 tz
     ON tc.Lookup_Key = t1.Zip AND tz.col_name = 'Zip';

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

0 голосов
/ 14 февраля 2019

Использовать условное агрегирование:

SELECT
    t1.Primary_Key,
    MAX(CASE WHEN t2.Col_Name = 'City' THEN t2.Value END) City,
    MAX(CASE WHEN t2.Col_Name = 'Zip' THEN t2.Value END) Zip
FROM table1 t1
INNER JOIN table2 t2 ON t2.Lookup_Key IN (t1.City, t1.Zip)
GROUP BY t1.Primary_Key

Это Демонстрация DB Fiddle с вашими примерами возвращаемых данных:

| Primary_Key | City    | Zip   |
| ----------- | ------- | ----- |
| 1           | Seattle | 70895 |
| 2           | Chicago | 60604 |
...