这是我的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)是否有其他方式动态设置聚合方法?
答案 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根据您的方案动态构建实际查询。