SQL - 比较 2 个计数值以更新完成字段
SQL - Compare 2 Count values to update a Completion field
示例场景:
- 一个订单有 5 件商品
- 每个项目都有一个单独的位列,用于确定它们是否已被接收。 (ItemReceived)PartsTable
- 收到所有 5 件商品后,我想更新 OrdersTable
中的 (OrderComplete) 字段
我知道下面的代码不起作用,但这是我正在努力实现的示例:
UPDATE OrdersTable SET OrderComplete = 1
FROM PartsTable
WHERE
OrdersTable.OrderID = (SELECT TOP 1 OrderID FROM OrdersTable ORDER BY changedate DESC)
AND
COUNT(PartsTable.ItemReceived) = COUNT(PartsTable.EquipmentID)
所以当每个单独的部分都设置为已接收时 (ItemReceived),然后我希望 COUNT
函数将此列与 进行比较设备ID
示例 1
- 4 个零件已收到 (ItemsReceived = 4)
- 1 部分未收到
- 计数(PartsTable.ItemReceived) 4 = 计数(PartsTable.EquipmentID) 5
在这种情况下,4 不等于 5,所以什么也不会发生
示例 2
- 5 个零件已收到 (ItemsReceived = 5)
- 0 个零件尚未收到
- 计数(PartsTable.ItemReceived) 5 = 计数(PartsTable.EquipmentID) 5
在这种情况下 5 等于 5 所以 OrderComplete 应该等于 TRUE
感谢您对此问题的帮助
您可以使用 NOT EXISTS
而不是 COUNT
。
这将 UPDATE
所有 Orders
在没有等待接收的部分时完成。如果仍有一个或多个零件等待接收,则订单将不会更新完成。
NOT EXISTS
中的连接可能不正确,因为我不确定 OrdersTable
如何链接到 PartsTable
,但它应该让您朝着正确的方向前进。
UPDATE
OrdersTable
SET
OrderComplete = 'TRUE'
FROM
OrdersTable
WHERE
NOT EXISTS
(
SELECT *
FROM PartsTable
WHERE ItemReceived = 'FALSE'
AND OrdersTable.Id = PartsTable.Id
)
示例场景:
- 一个订单有 5 件商品
- 每个项目都有一个单独的位列,用于确定它们是否已被接收。 (ItemReceived)PartsTable
- 收到所有 5 件商品后,我想更新 OrdersTable 中的 (OrderComplete) 字段
我知道下面的代码不起作用,但这是我正在努力实现的示例:
UPDATE OrdersTable SET OrderComplete = 1
FROM PartsTable
WHERE
OrdersTable.OrderID = (SELECT TOP 1 OrderID FROM OrdersTable ORDER BY changedate DESC)
AND
COUNT(PartsTable.ItemReceived) = COUNT(PartsTable.EquipmentID)
所以当每个单独的部分都设置为已接收时 (ItemReceived),然后我希望 COUNT
函数将此列与 进行比较设备ID
示例 1
- 4 个零件已收到 (ItemsReceived = 4)
- 1 部分未收到
- 计数(PartsTable.ItemReceived) 4 = 计数(PartsTable.EquipmentID) 5
在这种情况下,4 不等于 5,所以什么也不会发生
示例 2
- 5 个零件已收到 (ItemsReceived = 5)
- 0 个零件尚未收到
- 计数(PartsTable.ItemReceived) 5 = 计数(PartsTable.EquipmentID) 5
在这种情况下 5 等于 5 所以 OrderComplete 应该等于 TRUE
感谢您对此问题的帮助
您可以使用 NOT EXISTS
而不是 COUNT
。
这将 UPDATE
所有 Orders
在没有等待接收的部分时完成。如果仍有一个或多个零件等待接收,则订单将不会更新完成。
NOT EXISTS
中的连接可能不正确,因为我不确定 OrdersTable
如何链接到 PartsTable
,但它应该让您朝着正确的方向前进。
UPDATE
OrdersTable
SET
OrderComplete = 'TRUE'
FROM
OrdersTable
WHERE
NOT EXISTS
(
SELECT *
FROM PartsTable
WHERE ItemReceived = 'FALSE'
AND OrdersTable.Id = PartsTable.Id
)