繁体   English   中英

SQL server:无效的列名错误

[英]SQL server: Invalid column name error

这是我的sql脚本,我想通过使用CASE动态设置聚合方法:

select t.tagname,
  case t.aggregationmethod 
  when 'Sum' then SUM 
  when 'Average' then AVG 
  WHEN 'Max' then MAX 
  WHEN 'Min' THEN MIN ELSE SUM END +'('+tv.Value+')'
  from tag t, tagvalue tv where t.tagid=tv.tagid

执行脚本时,会弹出一条错误信息:

    Invalid column name 'SUM'.
    Invalid column name 'AVG'.
    Invalid column name 'MAX'.
    Invalid column name 'MIN'.

我的问题:
(1)如何修复我上面的脚本,问题出在哪里?
(2)是否有其他方式动态设置聚合方法?

您的方法需要动态SQL。 但是,您可以这样做:

select t.tagname,
       (case t.aggregationmethod 
             when 'Sum' then SUM(tv.value)
             when 'Average' then AVG(tv.value)
             WHEN 'Max' then MAX(tv.value)
             WHEN 'Min' then MIN(tv.value)
             ELSE SUM(tv.value)
        end)
from tag t join
     tagvalue tv 
     on t.tagid = tv.tagid;

请注意,我还将join语法更改为显式而非隐式。

你的问题是因为WHEN x THEN y语法假设x是一个表达式而y是一个列或一个常量值,或者可能是一个涉及某些列的表达式。 编写查询的方式不满足这些情况。

您可以使用动态SQL根据您的方案动态构建实际查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM