0

サンプル データについては、以下のスクリーン キャップを参照してください。これらのデータを正規化すると、データに関する限り同じことを意味するこれらの類似のコードが見つかりました。primarycode右側の s が左側の s に更新されるようにテーブルを更新しようとしています

ここに画像の説明を入力

これらの値を見つけるために使用したクエリ:

select  *
from icd
inner join icd as i2 on i2.primarycodetext=icd.primarycodetext
and i2.primarycode <> icd.primarycode
where icd.primarycode like '%0'

私が試した更新クエリ。

update icd
set icd.primarycode=i2.primarycode
from 
(


select  *
from icd
inner join icd as i2 on i2.primarycodetext=icd.primarycodetext
and i2.primarycode <> icd.primarycode
where icd.primarycode like '%0'
)t

受信したエラー:Msg 8156, Level 16, State 1, Line 12 The column 'primarycode' was specified multiple times for 't'. 編集: このテーブルの 2 つの列のみが primarycode と primarycodetext です

4

1 に答える 1

2

わかりました、そのままの質問については、次のことを行う必要があります。

UPDATE I1
SET I1.primarycode = I2.primarycode
FROM icd AS I1
INNER JOIN icd AS I2 
ON i2.primarycodetext = i1.primarycodetext
AND i2.primarycode <> I1.primarycode
WHERE I1.primarycode LIKE '%0'

しかし、それを行った後、テーブルに重複が発生します。本当に取得したいもの (それらの値の一意のレコード) を考えると、DELETEそれらのレコードを更新するのではなく、次のようにする必要があります。

DELETE I1
FROM icd AS I1
INNER JOIN icd AS I2 
ON i2.primarycodetext = i1.primarycodetext
AND i2.primarycode <> I1.primarycode
WHERE I1.primarycode LIKE '%0'
于 2012-07-30T20:03:10.713 に答える