SQL server:无效的列名错误

时间:2014-07-11 01:56:14

标签: sql sql-server

这是我的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)是否有其他方式动态设置聚合方法?

2 个答案:

答案 0 :(得分:3)

您的方法需要动态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语法更改为显式而非隐式。

答案 1 :(得分:0)

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

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