1

我刚刚发现了这个漂亮的小功能。我有几个问题。考虑下面的陈述。

这就是解释它是如何工作的。USING 语句是用来比较是否匹配正确的?我想使用它现在的样子,但我想在 MATCH 部分的源表中使用另外 2 个列。我不能那样做。那么有没有办法可以使用 2 列(已故(我知道它的拼写错误:))和 hicno_enc)?
我想做的另一件事不知道是否可能,但是如果该行存在于目标中但不存在于源中,则将其标记为非活动。

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 列(已故(我知道它的拼写错误:))和 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 回答