[英]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.