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

标签 mysql sql google-bigquery dynamic-sql

背景

我想动态重命名 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/

相关文章:

google-bigquery - 如何克服连接联合表与其他表的错误

mysql - SQL 语法错误 phpmyadmin #1064

php - 分解数组并分配为变量

mysql - 存在ID关联时如何从多个表中获取行

sql - 如何使用 VB.NET 的 SMO 类将单个表传输到 MSSQL 服务器中的另一个数据库?

mysql - 无法添加外键约束 - 数据类型匹配

sql - 在sql函数中声明变量

c++ - MySQL 连接器 C++ 64 位从 Visual Studio 2012 中的源构建

python - 通过 Python API 创建 Bigquery 表

google-bigquery - 谷歌 bigquery 提取压缩现在不起作用