背景
我想动态地在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。
例如:
表格中的列...
1 ---- --- X1 X2
2 ---- ---- X2 X3
3 ---- ---- X4 X5
运行查询后预期的列...
但实际的o / p列是::
查询 任何想法,如何使用选择查询动态生成列,请纠正我,如果我错了。
答案 0 :(得分:2)
以下是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手动编写少量具有SUM(...)的行并不是什么大问题
如果不是这种情况 - 您可以先运行以下查询
,以编程方式生成上述查询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
所以,现在只需将其复制并粘贴到查询编辑器中并运行它
你可以在这里看到类似的例子 - https://stackoverflow.com/a/36623258/5221944