在 Bigquery 中使用 Select 从行数据动态创建列
Dynamically creating columns from row data using Select in Bigquery
背景
我想在 sql select 语句中动态重命名我的 case 语句。
例如:
SELECT (case when id= x.id then x.sums end) x.id
as (select id,count(*) sums from table
group by id) x
我想要的输出是创建的列列表,标签是来自 "id" 列的不同 ID。
然而,这个变量 x.id 不是动态输出值,而是我得到输出单列 x.id.
例如:
table 中的列...
id---c1----c2
1----x1---x2
2----x2----x3
3----x4----x5
运行 查询后预期的列...
1-----2-----3
但实际 o/p 列是::
x.id
查询
任何想法,如何使用 select 查询动态生成列,如果我错了,请纠正我。
以下适用于 BigQuery!
请注意:您对输出列名称的预期不正确!
列名不能以数字开头 - 因此在下面的示例中 - 我将使用 id_1、id_2 和 id_3 而不是 1、2 和 3
SELECT
SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,
SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,
SUM(CASE WHEN id = 3 THEN 1 END) AS id_3
FROM YourTable
以上示例假设您事先知道您的 ID,并且 ID 很少,因此为每个 ID 手动编写几行 SUM(...) 并不是什么大问题
如果不是这种情况 - 您可以首先通过 运行ning 下面的查询
以编程方式生成上面的查询
SELECT 'SELECT ' +
GROUP_CONCAT_UNQUOTED(
'SUM(CASE WHEN id = ' + STRING(id) + ' THEN 1 END) AS id_' + STRING(id)
)
+ ' FROM YourTable'
FROM (
SELECT id FROM (
SELECT * FROM YourTable GROUP BY id ORDER BY id
)
结果 - 您将得到如下字符串
SELECT SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,SUM(CASE WHEN id = 3 THEN 1 END) AS id_3 FROM YourTable
所以,现在只需将其复制并粘贴到查询编辑器中,然后运行它
你可以在这里看到类似的例子 -
背景
我想在 sql select 语句中动态重命名我的 case 语句。
例如:
SELECT (case when id= x.id then x.sums end) x.id
as (select id,count(*) sums from table
group by id) x
我想要的输出是创建的列列表,标签是来自 "id" 列的不同 ID。
然而,这个变量 x.id 不是动态输出值,而是我得到输出单列 x.id.
例如:
table 中的列...
id---c1----c2
1----x1---x2
2----x2----x3
3----x4----x5
运行 查询后预期的列...
1-----2-----3
但实际 o/p 列是::
x.id
查询 任何想法,如何使用 select 查询动态生成列,如果我错了,请纠正我。
以下适用于 BigQuery!
请注意:您对输出列名称的预期不正确!
列名不能以数字开头 - 因此在下面的示例中 - 我将使用 id_1、id_2 和 id_3 而不是 1、2 和 3
SELECT
SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,
SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,
SUM(CASE WHEN id = 3 THEN 1 END) AS id_3
FROM YourTable
以上示例假设您事先知道您的 ID,并且 ID 很少,因此为每个 ID 手动编写几行 SUM(...) 并不是什么大问题
如果不是这种情况 - 您可以首先通过 运行ning 下面的查询
以编程方式生成上面的查询SELECT 'SELECT ' +
GROUP_CONCAT_UNQUOTED(
'SUM(CASE WHEN id = ' + STRING(id) + ' THEN 1 END) AS id_' + STRING(id)
)
+ ' FROM YourTable'
FROM (
SELECT id FROM (
SELECT * FROM YourTable GROUP BY id ORDER BY id
)
结果 - 您将得到如下字符串
SELECT SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,SUM(CASE WHEN id = 3 THEN 1 END) AS id_3 FROM YourTable
所以,现在只需将其复制并粘贴到查询编辑器中,然后运行它
你可以在这里看到类似的例子 -