背景
我想在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”列不同。
但是,这个变量x.id不是动态输出值,而是输出一列x.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写几行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

10-01 00:40
查看更多