【发布时间】:2020-01-25 17:57:20
【问题描述】:
我想根据子查询是否返回 4 条记录来更新同一个表中的列。
这是表结构
Id Form Quantity Transitdays percentUnderQty percentOverQty
192 0 15500 5 13950 17050
193 0 1250 5 1125 1375
194 0 5000 5 4500 5500
195 0 12500 4 11250 13750
196 0 164250 3 147825 180675
197 0 5250 3 4725 5775
198 0 6250 3 5625 6875
199 0 12250 3 11025 13475
200 0 1750 2 1575 1925
201 0 17000 2 15300 18700
202 0 2500 2 2250 2750
203 0 11500 2 10350 12650
204 0 1250 1 1125 1375
这是我迄今为止的尝试。该语句正在更新所有记录,而不仅仅是基于子查询的特定记录。
UPDATE Temp_Runlist
SET Form = (
SELECT MAX(Quantity) + 1 AS Form
FROM Temp_Runlist AS t2
)
WHERE EXISTS (
SELECT TOP (4) Quantity
FROM Temp_Runlist AS t1
WHERE (Quantity BETWEEN 1125 AND 1375) AND (Form = 0)
)
逻辑解释: 我将遍历每个数量并调用此查询。查询应该使用从 1 开始的值更新 Form 列。在下面的查询示例中,结果应该是查询不会更新表单,因为子查询只找到 2 个匹配的记录。如果子查询返回 4 条记录,那么这 4 条记录的 Form 列将为 1。在下一次传递时,如果只有子查询返回四个匹配项,则 form 将为 2。
【问题讨论】:
-
请说明您要实现的逻辑。显然,您的查询不正确,它正在执行您指定的操作,并且您的解释不清楚。如果子查询返回少于 4 条记录怎么办?显示您想要的结果也会有所帮助。
标签: sql sql-server select subquery