Как конвертировать строки в столбцы в Google BigQuery? - PullRequest
0 голосов
/ 25 февраля 2020

Ниже вводится: enter image description here

Ожидаемый результат: enter image description here

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Так как я хочу фиксированное количество динамических c имен столбцов, генерируемых во время выполнения по месяцам, я добавил logi c, чтобы проверить значение месяца для динамически генерируемых имен столбцов следующим образом:

стандарт SQL

С project.dataset.table КАК (ВЫБЕРИТЕ 'Янв-20' месяц, 1 AmountSales, 2 AmountDebit, 3 DebitCreditPercent UNION ALL SELECT 'De c -19', 4, 5, 6 UNION ALL SELECT 'Nov-19', 7, 8, 9 UNION ALL SELECT 'Oct-19', 10, 11, 12 UNION ALL SELECT 'Sep-19', 13, 14, 15) SELECT col AS месяц, MAX (ЕСЛИ ( month = Concat (FORMAT_DATE ("% b", DATE_ADD (DATE_TRUN C (CURRENT_DATE (), MONTH), ИНТЕРВАЛ -2 МЕСЯЦ)), '-', substr (приведение (EXTRACT (ГОД ОТ DATE_ADD (DATE_TRUN C) (CURRENT_DATE (), MONTH), INTERVAL -2 MONTH)) в виде строки), 3,2)), val, NULL)) AS Jan_19

ОТ project.dataset.table, UNNEST (['AmountSales', ' AmountDebit ',' DebitCreditPercent ']) col, UNNEST ([CASE col КОГДА' AmountSales 'THEN AmountSales WHEN' AmountDebit 'THEN AmountDebit WHEN' DebitCreditPercent 'THEN DebitCreditPercent END]) val GROUP BY co л

1 голос
/ 25 февраля 2020

Предполагая, что у вас ограниченное количество строк (месяцев) и столбцов - вы можете использовать ниже

#standardSQL
SELECT col AS month,
  MAX(IF(month = 'Jan-20', val, NULL)) AS Jan_20,
  MAX(IF(month = 'Dec-19', val, NULL)) AS Dec_19,
  MAX(IF(month = 'Nov-19', val, NULL)) AS Nov_19,
  MAX(IF(month = 'Oct-19', val, NULL)) AS Oct_19,
  MAX(IF(month = 'Sep-19', val, NULL)) AS Sep_19
FROM `project.dataset.table`,
UNNEST(['AmountSales', 'AmountDebit', 'DebitCreditPercent']) col,
UNNEST([CASE col 
  WHEN 'AmountSales' THEN AmountSales 
  WHEN 'AmountDebit' THEN AmountDebit 
  WHEN 'DebitCreditPercent' THEN DebitCreditPercent 
  END]) val
GROUP BY col

Вы можете протестировать / поиграть с выше, используя пример / фиктивные данные, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Jan-20' month, 1 AmountSales, 2 AmountDebit, 3 DebitCreditPercent UNION ALL
  SELECT 'Dec-19', 4, 5, 6 UNION ALL
  SELECT 'Nov-19', 7, 8, 9 UNION ALL
  SELECT 'Oct-19', 10, 11, 12 UNION ALL
  SELECT 'Sep-19', 13, 14, 15 
)
SELECT col AS month,
  MAX(IF(month = 'Jan-20', val, NULL)) AS Jan_20,
  MAX(IF(month = 'Dec-19', val, NULL)) AS Dec_19,
  MAX(IF(month = 'Nov-19', val, NULL)) AS Nov_19,
  MAX(IF(month = 'Oct-19', val, NULL)) AS Oct_19,
  MAX(IF(month = 'Sep-19', val, NULL)) AS Sep_19
FROM `project.dataset.table`,
UNNEST(['AmountSales', 'AmountDebit', 'DebitCreditPercent']) col,
UNNEST([CASE col 
  WHEN 'AmountSales' THEN AmountSales 
  WHEN 'AmountDebit' THEN AmountDebit 
  WHEN 'DebitCreditPercent' THEN DebitCreditPercent 
  END]) val
GROUP BY col

с выходом

Row month               Jan_20  Dec_19  Nov_19  Oct_19  Sep_19   
1   AmountSales         1       4       7       10      13   
2   AmountDebit         2       5       8       11      14   
3   DebitCreditPercent  3       6       9       12      15   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...