我们有一个库存管理系统,它由项目目录、库存和资产组成。目前,我们对每一个库存都有一个条目,但我们现在正在实现库存表和资产表中的数量。例如,清单表中的数据如下所示:
InventoryID | ItemID
----------------------
100 | 5
101 | 5
102 | 5
103 | 5
104 | 9
105 | 5我们现在要做的是将记录与相同的ItemID合并,并将数量放在字段中:
InventoryID | ItemID | Quantity
---------------------------------
100 | 5 | 5
104 | 9 | 1我有数千条需要合并的记录,我想知道一种更快的方法来实现这一点,而不是当前的方法,即查找记录、获取计数、删除除最新记录之外的所有记录以及使用计数更新quantity字段(所有这些都是在SSMS中手动完成的,而不是通过任何脚本)。
如有任何帮助/建议,将不胜感激。
发布于 2015-11-23 20:37:00
制作临时表并插入:
SELECT MIN(InventoryID), ItemID, COUNT(*) as Quantity
FROM Inventory
INTO #TEMP
GROUP BY ItemID然后更新主表(如果您还没有创建一个quantity列,那么首先创建一个quantity列):
UPDATE I
SET I.Quantity = T.Quantity
FROM #TEMP
WHERE I.InventoryID = T.InventoryID and I.ItemID = T.ItemID然后从库存中删除额外的记录
DELETE
FROM INVENTORY
WHERE InventoryID not in(
SELECT InventoryID
FROM #TEMP)发布于 2015-11-23 20:28:29
假设您在库存表中有一个quantity字段,您可以更新该字段,然后删除现在不必要的记录。
UPDATE Inventory
SET Inventory.Quantity = Computed.QCount
FROM Inventory
INNER JOIN
(
SELECT InventoryId, COUNT(*) as QCount
FROM Inventory
GROUP BY InventoryId
) as Computed
on Inventory.ItemId = Computed.ItemId
--Now Delete Duplicates
DELETE Inventory
FROM Inventory
LEFT OUTER JOIN (
SELECT MIN(InventoryId) as RowId, ItemId
FROM Inventory
GROUP BY ItemId
) as KeepRows ON
Inventory.InventoryId = KeepRows.RowId
WHERE
KeepRows.ItemId IS NULL发布于 2015-11-23 20:34:48
一个简单的脚本可以创建所需的新表,然后删除旧表并用新表替换数据。
例如,类似于
SELECT
MIN(InventoryID) AS InventoryID,
ItemID,
COUNT(*) AS Quantity
INTO
NewInventoryTable
FROM
Inventory
GROUP BY
ItemIDhttps://stackoverflow.com/questions/33879954
复制相似问题