[英]how to convert rows into columns in google BigQuery?
Assuming you have limited number of rows(months) and columns - you can use below假设您的行数(月)和列数有限 - 您可以在下面使用
#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
You can test / play with above using sample/dummy data as in below example您可以使用以下示例中的示例/虚拟数据来测试/播放上面的内容
#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
with output带输出
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
Since I want a fixed number of dynamic columns names generated at run time month-wise, I have added logic to check month value to dynamically generated column names as follow:由于我想要在运行时按月生成固定数量的动态列名称,因此我添加了检查月份值的逻辑以动态生成的列名称,如下所示:
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 = Concat(FORMAT_DATE("%b", DATE_ADD(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL -2 MONTH)),'-', substr(cast(EXTRACT(YEAR FROM DATE_ADD(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL -2 MONTH)) as string),3,2)), val, NULL)) AS Jan_19 WITH project.dataset.table
AS ( SELECT 'Jan-20' 月, 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 = Concat(FORMAT_DATE("%b") , DATE_ADD(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL -2 MONTH)),'-', substr(cast(EXTRACT(YEAR FROM DATE_ADD(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL -2 MONTH)) 作为字符串),3,2)), val, NULL)) AS Jan_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 FROM project.dataset.table
, UNNEST(['AmountSales', 'AmountDebit', 'DebitCreditPercent']) col, UNNEST([CASE col WHEN 'AmountSales' THEN AmountSales WHEN 'AmountDebit' THEN AmountDebit WHEN 'DebitCreditPercent' THEN DebitCreditPercent' THEN DebitCreditPercent] ) val GROUP BY col
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.