我对合并到事实表的合并语句有疑问
这非常简单,直到用户开始从源中删除记录。
当前SQL:
Set Count = 1
WHEN NOT MATCHED
INSERT
WHEN MATCHED
UPDATED
新SQL:
因此,在此示例中,一条记录已从源中删除,它不再匹配,但是没有可插入的内容。我希望将计数设置为0。
WHEN DELETED FROM SOURCE
Set Count = 0
。
Source
Bob Jones | 1111
Mary Jones | 1112
James Jones | 1113
Helen Jones | 1114
TARGET
Bob Jones | 1111 | Count 1
Mary Jones | 1112| Count 1
James Jones | 1113| Count 1
Helen Jones | | 1114| Count 1
Peter Market | 1115| Count 0
我正在使用合并加载到事实表,现在它们只是删除记录,我的事实已关闭。必须以某种方式解决这个问题?
非常感谢您的帮助。
答案 0 :(得分:0)
您可以使用带有源代码的目标full outer join
进行合并,但是id
必须在两者之间都具有唯一的键才能实现此功能。
MERGE INTO target tgt
USING (SELECT CASE
WHEN s.id IS NULL THEN t.name --write this logic for all other non id columns.
ELSE s.name
END AS name,
coalesce(s.id, t.id) AS id, --use target's id when no source id is available
CASE
WHEN s.id IS NULL THEN 0 --zero for non matching ids
ELSE 1
END AS source_count
FROM target t
full outer join source s
ON s.id = t.id) src
ON ( src.id=tgt.id)
WHEN matched THEN
UPDATE SET tgt.name = src.name,
tgt.source_count = src.source_count
WHEN NOT matched THEN
INSERT (id,
name,
source_count)
VALUES(src.id,
src.name,
1) ; --insert 1 by default for new rows