1

表 1 如下所示。

ID  SIZE    TYPE      SERIAL
1    4      W-meter1  123456
2    5      W-meter2  123456
3    4      W-meter   585858
4    4      W-Meter   398574

如你看到的。项目 1 和 2 都具有相同的序列号。我有一个内部连接更新语句,它将根据将它们的序列号链接到列表来更新这些设备上的 UniqueID。

我想做的事。手动修改具有重复序列号的项目,并以脚本方式更新唯一的项目。我假设我必须在不确定的地方引用不同的命令。

这是我的更新声明。非常简单直接。

update UM00400

Set um00400.umEquipmentID = tb2.MIUNo

from UM00400 tb1


inner join AA_Meters tb2 on
tb1.umSerialNumber = tb2.Old_Serial_Num
where tb1.umSerialNumber  <> tb2.New_Serial_Num
4

2 回答 2

0

如果我正确理解您的问题,下面的查询将帮助您:

;WITH CTE AS
(
// getting those serial numbers which are not duplicated

SELECT umSerialNumber,COUNT(umSerialNumber) as CountOfSerialNumber
FROM UM00400 
GROUP BY umSerialNumber
HAVING COUNT(umSerialNumber) = 1
)

UPDATE A SET A.umEquipmentID = C.MIUNo
FROM UM00400 A 
INNER JOIN CTE B ON A.umSerialNumber = B.umSerialNumber
INNER JOIN AA_Meters C ON A.umSerialNumber = C.Old_Serial_Num
于 2013-11-08T17:26:14.417 回答
0
;WITH CTE
AS
(
    SELECT * , rn = ROW_NUMBER() OVER (PARTITION BY SERIAL ORDER BY SERIAL)
    FROM UM00400
)
UPDATE CTE
SET CTE.umEquipmentID = tb2.MIUNo
inner join AA_Meters tb2 
on CTE.umSerialNumber = tb2.Old_Serial_Num
where tb1.umSerialNumber  <> tb2.New_Serial_Num
AND CTE.rn = 1

这将更新具有相同序列号的多条记录的第一条记录。

于 2013-11-08T17:16:52.993 回答