gpt4 book ai didi

mysql - 使用 Bigquery 中的 Select 从行数据动态创建列

转载 作者:行者123 更新时间:2023-11-29 02:16:07 24 4
gpt4 key购买 nike

背景

我想在 sql select 语句中动态重命名我的 case 语句。

例如:

SELECT (case when id= x.id then x.sums end) x.id
as (select 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 并且它们很少,所以用 SUM(...) 为每个 ID 手动编写几行并不是什么大问题

如果不是这种情况 - 您可以首先通过运行下面的查询以编程方式生成上面的查询

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com