sql - “聚合可能不会出现在 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 语句的集合列表中。
就像我似乎错过了什么?
解决方案
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;
推荐阅读
- php - 如何从我的基本 PHP 网站中的其他页面循环和读取 PHP 变量?
- sqlite - 为什么自动补全在 xeous-sqlite 中对字段和表格的名称不起作用
- django - 如何对失败的 Django LDAP 连接进行故障排除
- c++ - 如何解决 Visual Studio 2015 中的此编译错误?
- c++ - 调整窗口大小时如何调整屏幕位置(glfw/opengl)
- java - 为什么 GridPane 列的间距如此之大
- javascript - 在js中将多个数组(具有相似的id)组合成一个对象
- html - 渲染实际的 HTML 图像
- amazon-ec2 - 在 AWS 内部/私有服务器上设置 SSL
- c - microtime.h:没有这样的文件或目录