背景
我想动态重命名 sql select 语句中的 case 语句。
例如:
SELECT(当 id= x.id 然后 x.sums 结束时的情况) x.id
as (从表中选择 id,count(*) 总和
按 ID 分组)x
我想要的输出是创建的列的列表,其中标签作为与“id”列不同的 id。
但是,这个变量x.id不是动态输出值,而是输出单列x.id。
例如:
表中的列...
id---c1----c2
1----x1---x2
2----x2----x3
3----x4----x5
运行查询后预期的列...
1-----2----3
但实际的o/p列是::
x.id
查询 任何想法,如何使用选择查询动态生成列,如果我错了,请纠正我。
最佳答案
以下是 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(...) 并不是什么大问题
如果不是这种情况 - 您可以首先通过运行下面的查询以编程方式生成上面的查询
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
关于mysql - 使用 Bigquery 中的 Select 从行数据动态创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39394111/