gpt4 book ai didi

sql - 在更新语句中使用 SUM where 条件

转载 作者:行者123 更新时间:2023-12-04 06:50:22 25 4
gpt4 key购买 nike

我一直在尝试搜索这个,但不确定我使用的是正确的术语。或者它可能只是这是不可能的。但是我想要做的是更新表中构成小于设定值的总和值的所有记录。

所以这是一个例子:

ID   type    amount   received_date    processed_date
1 debit 10 7/1/2010 NULL
2 debit 10 7/2/2010 NULL
3 debit 10 7/3/2010 NULL

现在我想要做的是更新等于总和小于 22 的所有记录。所以当我做总和 id 1 和 2 将等于 20 小于 22。但它也只需要是记录为processed_date 设置一个空值。我还希望它能够工作,以便它从最旧更新到最新。

基本上这是我用伪代码编写它的方式:
UPDATE credits
SET date_processed = '8/1/2010'
WHERE SUM(amount) <= @total AND
credit_type = [debits]

但我知道这行不通。所以我希望一些 SQL 大师可能有想法。

我确定我可以在游标中写这个,但我想知道是否有一种基于集合的方法来执行这个。

编辑:我更新了下面的表格和简要说明,以更好地描述我的情况。

最佳答案

SQL 表中的行表示项目的无序列表。因此,我们必须提供订单。在您的示例中,您暗示它应该处理按 Id 排序的行。

Update TableName
Set processed_date = '2010-08-01'
Where [type] = 'debit'
And Exists (
Select 1
From TableName As C1
Where C1.Id <= TableName.Id
And C1.[type] = 'debit'
Having Sum(C1.amount) <= @total
)

正如我在评论中提到的,依赖 Id 作为序列的标记是不安全的。可能会有间隙,并且有人可以使用 IDENTITY_INSERT 将“稍后”的行插入到这些间隙中。相反,您应该使用日期时间列。如果该列是 received_date ,然后简单地替换 Idreceived_date在上面的查询中。

关于sql - 在更新语句中使用 SUM where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3207048/

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