1

この気の利いた小さな機能について知りました。いくつか質問があります。以下のステートメントを検討してください。

これは、それがどのように機能するかを解釈する方法です。USING ステートメントは、正しい一致があるかどうかを確認するために比較されるものですか? 今のまま使いたいのですが、MATCH部分でソーステーブルから他に2列使いたいです。私はそれをすることはできません。それで、2つの列(decesed(綴りが間違っていることはわかっています:))とhicno_enc)を使用できる方法はありますか?
私がやりたいことはもう1つありますが、可能かどうかはわかりませんが、行がターゲットに存在するがソースに存在しない場合は、非アクティブとしてマークします。

SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE
FROM 
    aco.tmpimport i
    INNER JOIN aco.patients p 
    ON p.hicnoenc = i.hicno_enc
    MERGE aco.patients AS target
    USING (
            SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE 
            FROM aco.tmpimport
          ) AS source
    ON target.hicnoenc = source.hicno_enc
    WHEN MATCHED AND target.isdeceased <> CONVERT(BIT,source.decesed) THEN 
        UPDATE 
            SET 
                target.isdeceased = source.decesed, 
                updatedat = getdate(), 
                updatedby = 0
    WHEN NOT MATCHED THEN
        INSERT (firstname, lastname, gender, dob, isdeceased, hicnoenc)
        VALUES (source.FIRST_NAME, 
                source.LAST_NAME, 
                source.sex1, 
                source.BIRTH_DATE, 
                source.decesed, 
                source.hicno_enc);
4

1 に答える 1

2

それで、2つの列(decesed(綴りが間違っていることはわかっています:))とhicno_enc)を使用できる方法はありますか?

using 句の select ステートメントに必要な列を追加します。

USING (
        SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE, decesed, hicno_enc 
        FROM aco.tmpimport
      ) AS source

行がターゲットに存在するがソースに存在しない場合は、非アクティブとしてマークします。

when not matched by source句を追加して更新します。

WHEN NOT MATCHED BY SOURCE THEN
    UPDATE 
        SET active = 0
于 2012-09-23T15:20:37.767 に答える