我有一份报告,我正在处理,报告中传递了一些参数。其中一个是由逗号操作的一串UserIds。这些被拆分并发送到表变量中。在我的查询方面,我需要能够对值进行求和。在这些Sums的一些中,我需要通过大小写将该值添加到总和中,而在另一种情况下不添加它。代码看起来像这样......
SELECT
TrnId,
TrnCode,
(SUM(CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end)) as Value
AnotherColumn
FROM SomeTableJoinedOnOtherThings
我遇到的问题是......"无法对包含聚合或子查询的表达式执行聚合函数。"我假设这是对IN表的检查。
我有另外一份报告,除了我只检查我传递查询的参数。
(CASE PolicyUseId when @UseId then PriceColumn else 0 end)
此查询可以正常运行并完成所有计算。我不确定如何在选择行中没有这个case语句的情况下使总数正确,因为我需要提取2组数据来决定如何在select中添加它们。任何建议都会很棒。
答案 0 :(得分:4)
也许你根本不需要聚合:
SELECT TrnId, TrnCode,
(CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end) as Value
AnotherColumn
FROM SomeTableJoinedOnOtherThings;
如果确实需要聚合,则需要GROUP BY
。然后LEFT JOIN
将起作用 - 假设您在@Table
中没有重复项:
SELECT TrnId, TrnCode,
SUM(CASE WHEN tt.UseId IS NOT NULL THEN TotalPremium ELSE 0 END) as Value,
AnotherColumn
FROM SomeTableJoinedOnOtherThings t LEFT JOIN
@Table tt
ON t.PolicyUseId = tt.UseId
GROUP BY TrnId, TrnCode, AnotherColumn;
答案 1 :(得分:2)
您无法针对子查询进行汇总。
也许LEFT OUTER在您的示例中将@table加入到该字段的PolicyUseId字段表中?然后在CASE中检查UseId是否为NULL?