Транспонировать столбцы, имеющие значения в строки - PullRequest
1 голос
/ 28 октября 2019

У меня есть требование, чтобы столбцы со значениями были транспонированы в строки. Например, обратитесь к таблице ниже:

cust:

cust_id | cover1 | cover2 | cover3
1234 | 'PAG' | Null | 'TDE'
5678 | Null | 'GAP' | Null

Учитывая приведенную выше таблицу, мы должны выяснить, какие столбцы имеют значение, и если в этом столбце есть значение, тодолжен быть создан ряд. Например,

cust_id | cover
1234 | 'PAG'
1234 | 'TDE'
5678 | 'GAP'

Для клиента 1234 заполняется только cover1 and cover 3, следовательно, будет создано 2 записей. Поскольку 5678 cover1 & cover2 являются значениями Null, следовательно, необходимо создать только запись 1 для cover_3.

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

select cust_id, cover1 AS cover where cover1 IS Not Null
UNION ALL
select cust_id, cover2 AS cover where cover2 IS Not Null
UNION ALL
select cust_id, cover3 AS cover where cover3 IS Not Null

Пожалуйста, поделитесь своими мыслями. Мы используем Spark-SQL 2.4

Спасибо

1 Ответ

0 голосов
/ 28 октября 2019

Может быть так:

SELECT CUST_ID, COVER FROM(
   SELECT * FROM test
   UNPIVOT(
          COVER
          for COVER_C
          IN(
             COVER1,
             COVER2,
             COVER3))
);

Вот это DEMO

...