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

 l38484676 发布于 2023-01-14 15:59
  • php
  • 我有一个类似于以下的表:

    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.有人有主意吗?

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有