Pivot 2 строки bigquery

# #google-bigquery #pivot

Вопрос:

Как я могу преобразовать 2 строки в столбцы?

 ID|col_1|col_2|col_3|col_4
1 |a    |A    |Q    |5000
1 |a    |B    |Q    |8000
2 |a    |A    |R    |4000
2 |a    |B    |T    |6000
 

В:

 ID|col_1|A_col3|A_col4|B_col3|B_col4
1 |a    |Q     |5000  |R     |4000
2 |a    |Q     |8000  |T     |6000
 

где значения в col_2 теперь являются заголовками столбцов, а значения col_3 и col_4 являются аггерированными в сводке.

Я попробовал это, но застрял на следующем шаге и не выдает желаемых результатов:

 select * from 
(
  select ID, col_1, col_2, col_3, col_4 from tableA
) as A
pivot (max(col_3) for col_2 in ('A','B'))
 

Ответ №1:

Просто используйте условную агрегацию:

 select id,
       max(case when col_2 = 'A' then col_3 end) as a_col3,
       max(case when col_2 = 'A' then col_4 end) as a_col4,
       max(case when col_2 = 'B' then col_3 end) as b_col3,
       max(case when col_2 = 'B' then col_4 end) as b_col4
from tablea
group by id;
 

Ответ №2:

Я попробовал это, но застрял на следующем шаге …

Рассмотрим следующий подход

 select *
from tableA
pivot (max(col_3) as col3, max(col_4) as col4 for col_2 in ('A', 'B'))    
 

если применить к образцам данных в вашем вопросе — вывод будет

введите описание изображения здесь