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 を更新する innerjoin update ステートメントがあります。

やりたいこと。シリアル番号が重複しているアイテムを手動で変更し、一意のものをスクリプトで更新します。ここで個別のコマンドを参照する必要があると思いますが、どこかで購入するかどうかはわかりません。

これは私の更新ステートメントです。かなりシンプルで簡単です。

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 に答える