首页 > 解决方案 > “聚合可能不会出现在 UPDATE 语句的集合列表中”。同时执行 2 个 SQL 查询

问题描述

我的 SQL Server 中有一个表,其中包含列

Currency, Amount, CurrencyRequestedTotal, Pcs

该表如下所示:

ID  Currency     Amount     Pcs         CurrencyRequestedTotal
--------------------------------------------------------------
1   USD          50000.00   4           NULL
2   NGN          30000.00   5           NULL
3   USD          49800.00   6           NULL
4   NGN          2500.00    6           NULL

到目前为止,我有这 2 个 SQL 查询,一个是进行计算,第二个是使用 Update 查询更新带有 ID 的表

它看起来像这样:

SELECT
    Currency, SUM(Amount) 
FROM
    [dbo].[CurrencyStats_SMO] 
WHERE
    Currency = 'NGN' 
GROUP BY 
    Currency

UPDATE [dbo].[CurrencyStats_SMO] 
SET CurrencyRequestedTotal = SUM(Amount) 
WHERE ID = 1

在控制台上,它没有显示任何看起来像错误的东西,但在第二个音符上我得到了这个

消息 157,级别 15,状态 1,第 10 行
聚合可能不会出现在 UPDATE 语句的集合列表中。

就像我似乎错过了什么?

标签: sqlsql-server

解决方案


SQL Server 支持窗口函数和可更新的 CTE。我会推荐:

with toupdate as (
      select cs.*,
             sum(case when Currency = 'NGN' then amount end) over (partition by id) as sum_amount        
      from CurrencyStats_SMO cs
      where id = 1
    )
update toupdate
    set CurrencyRequestedTotal = sum_amount;

以上将所有货币的总和设置为相同的值。如果您希望每种货币都有自己的总数,那么查询将如下所示:

with toupdate as (
      select cs.*,
             sum(amount) over (partition by id, currency) as sum_amount        
      from CurrencyStats_SMO cs
      where id = 1
    )
update toupdate
    set CurrencyRequestedTotal = sum_amount;

推荐阅读