我有一个类似于以下的表:
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) )
我需要在这个表中查询各个字段的总和,如下所示:
SELECT sum(q001001) as total001, sum(q001002) as total002, sum(q001005) as total005, FROM stats;
这会产生一行数据和三列数据.
但是,出于报告目的,我需要以相反的方式列出结果.我需要三行和一列(好吧,实际上是两个,第一个是总和的字段),如下所示:
FieldName | SUM
----------+-------
q001001 | 12345
q001002 | 5432
q001005 | 986
我想使用这样的一些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');
这里的想法是,sum(l.field_name)
将替换为相关的实际字段名称,对于WHERE
子句中的每个名称,然后进行评估以提供正确的求和结果值.但是,这会因以下错误而失败:
函数和(字符变化)不存在
因为值有文字/字符.如何将该字符值转换为要正确计算的未加引号的字符串?
这个SQL有效.但是,当然,每个都给出相同的和值field_name
,因为它q001001
在这里是硬编码的.
select l.field_name, (select sum(q001001) from stats) from stats_field_names_lookup as l where l.field_name in ('Q001001', 'Q001002', 'Q001005');
所以,我认为这个想法在理论上是合理的.只需要帮助弄清楚如何将该字符/字符串理解为field_name.有人有主意吗?