小编use*_*665的帖子

子查询中的动态字段名称?

我有一个类似于以下的表:

CREATE TABLE stats (
  name character varying(15),
  q001001 numeric(9,0),
  q001002 numeric(9,0),
  q001003 numeric(9,0),
  q001004 numeric(9,0),
  q001005 numeric(9,0)
)
Run Code Online (Sandbox Code Playgroud)

我需要在这个表中查询各个字段的总和,如下所示:

SELECT sum(q001001) as total001,
       sum(q001002) as total002,
       sum(q001005) as total005,
FROM stats;
Run Code Online (Sandbox Code Playgroud)

这会产生一行数据和三列数据.
但是,出于报告目的,我需要以相反的方式列出结果.我需要三行和一列(好吧,实际上是两个,第一个是总和的字段),如下所示:

FieldName | SUM
----------+-------
q001001   |  12345
q001002   |  5432
q001005   |  986
Run Code Online (Sandbox Code Playgroud)

我想使用这样的一些SQL,其中field_name(来自stats表中字段名称的查找表)用于子查询:

select l.field_name, (select sum(l.field_name) from stats)
from stats_field_names_lookup as l
where l.field_name in ('Q001001', 'Q001002', 'Q001005');
Run Code Online (Sandbox Code Playgroud)

这里的想法是,sum(l.field_name)将替换为相关的实际字段名称,对于WHERE子句中的每个名称,然后进行评估以提供正确的求和结果值.但是,这会因以下错误而失败:

函数和(字符变化)不存在

因为值有文字/字符.如何将该字符值转换为要正确计算的未加引号的字符串?

这个SQL有效.但是,当然,每个都给出相同的和值field_name,因为它q001001在这里是硬编码的.

select l.field_name, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql unpivot dynamic-sql aggregate-functions

6
推荐指数
1
解决办法
660
查看次数