如何在 Bigquery sql 中将多列反透视为行
How to unpivot multiple colums to rows in Bigquery sql
我正在努力 unpivot/pivot 使用 SQL。
我尝试了 BIGQUERY 文档中的 UNPIVOT 函数,但我通过使用下面的代码成功地只反转了一个列,但没有同时反转多个列
SELECT ... FROM
UNPIVOT(mail_sent FOR metric IN (mail_sent))
这是我得到的 table
month
mail_sent
mail_received
mail_opened
01
2000
1900
500
02
2200
2000
700
03
1900
1800
400
这是我想要的,将 月份 保留在列中,将所有其余部分保留在行中:
values
01
02
03
mail_sent
2000
2200
1900
mail_received
1900
2000
1800
mail_opened
500
700
400
知道怎么做吗?非常感谢!
我找到了解决方案:
SELECT month, metric, value
FROM final
UNPIVOT(value FOR metric IN (mail_sent, mail_received, mail_opened))
ORDER BY 1
考虑以下方法
select * from (
select * from your_table
unpivot(value for metric in (mail_sent, mail_received, mail_opened))
)
pivot (any_value(value) as _ for month in ('01', '02', '03'))
如果应用于您问题中的示例数据 - 输出为
我正在努力 unpivot/pivot 使用 SQL。
我尝试了 BIGQUERY 文档中的 UNPIVOT 函数,但我通过使用下面的代码成功地只反转了一个列,但没有同时反转多个列
SELECT ... FROM
UNPIVOT(mail_sent FOR metric IN (mail_sent))
这是我得到的 table
month | mail_sent | mail_received | mail_opened |
---|---|---|---|
01 | 2000 | 1900 | 500 |
02 | 2200 | 2000 | 700 |
03 | 1900 | 1800 | 400 |
这是我想要的,将 月份 保留在列中,将所有其余部分保留在行中:
values | 01 | 02 | 03 |
---|---|---|---|
mail_sent | 2000 | 2200 | 1900 |
mail_received | 1900 | 2000 | 1800 |
mail_opened | 500 | 700 | 400 |
知道怎么做吗?非常感谢!
我找到了解决方案:
SELECT month, metric, value
FROM final
UNPIVOT(value FOR metric IN (mail_sent, mail_received, mail_opened))
ORDER BY 1
考虑以下方法
select * from (
select * from your_table
unpivot(value for metric in (mail_sent, mail_received, mail_opened))
)
pivot (any_value(value) as _ for month in ('01', '02', '03'))
如果应用于您问题中的示例数据 - 输出为