gpt4 book ai didi

sql - 对 Case 语句求和并检查表变量中的值

转载 作者:行者123 更新时间:2023-12-04 23:44:02 25 4
gpt4 key购买 nike

我有一份正在处理的报告,该报告有一些传递给它的参数。其中之一是一串用逗号操作的UserId。这些被拆分并发送到表变量中。在我的查询中,我需要能够对值求和。在其中一些求和中,我需要根据情况将此值添加到总和中,而在另一种情况下则不添加。代码看起来像这样......

    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 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;

关于sql - 对 Case 语句求和并检查表变量中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com