SQL的新手,想要比較stg和src表之間的字段。識別表格之間的任何差異併爲變更指定「C」的交易狀態。任何新記錄都將設置爲「A」進行添加。比較表並標識新的或更改的字段
STG_DM_CLIENT和SRC_DM_CLIENT
什麼是做到這一點的最好辦法,那會是最好做一個某種形式的聯盟所有。不確定如何繼續,歡迎任何幫助。
SQL的新手,想要比較stg和src表之間的字段。識別表格之間的任何差異併爲變更指定「C」的交易狀態。任何新記錄都將設置爲「A」進行添加。比較表並標識新的或更改的字段
STG_DM_CLIENT和SRC_DM_CLIENT
什麼是做到這一點的最好辦法,那會是最好做一個某種形式的聯盟所有。不確定如何繼續,歡迎任何幫助。
您可以通過使用NOT IN確定新的記錄或NOT EXISTS
update STG_DM_CLIENT SET TransactionStatus = 'A' WHERE ID IN
(select Id from STG_DM_CLIENT
where Id not in (select Id from SRC_DM_CLIENT))
然後,您可以通過比較字段標識更改的記錄:
update STG_DM_CLIENT SET TransactionStatus = 'C' WHERE ID IN
(select STG_DM_CLIENT.Id from STG_DM_CLIENT
join SRC_DM_CLIENT on SRC_DM_CLIENT.Id = STG_DM_CLIENT.Id
where (SRC_DM_CLIENT.Field1 != STG_DM_CLIENT.Field1
OR SRC_DM_CLIENT.Field2 != STG_DM_CLIENT.Field2 ...))
我想在2個表的簡單連接在密鑰上(我猜它是源目標表,所以必須有一個公共密鑰),其他所有屬性都不相同。這在您需要加載漸變尺寸(SCD)時非常常見。檢查此:How do I model data that slowly changes over time?
update
[STG]
set
TransactionStatus = CASE WHEN [SRC].id IS NULL THEN 'A' ELSE 'C' END
from
STG_DM_CLIENT AS [STG]
left join
SRC_DM_CLIENT AS [SRC]
ON [STG].id = [SRC].id -- Or whatever relates the records 1:1
WHERE
[SRC].id IS NULL
OR [STG].field1 <> [SRC].field1
OR [STG].field2 <> [SRC].field2
OR [STG].field3 <> [SRC].field3
...
OR [STG].fieldn <> [SRC].fieldn
嗨,困惑的第一行 - WHEN [SRC] .id IS NULL然後'A'。當你聲明client_code = null,然後A時,它將如何識別新的客戶記錄。請解釋 - 可能會被誤解?預先感謝您 – Nobody
如果您使用LEFT JOIN數據,即使右表中沒有記錄,您也可以獲得左表上的所有記錄。這意味着如果記錄存在於STG中但不存在於SRC中,則所有SRC字段都將爲NULL。因此,如果SRC.id爲空,則它不存在於SRC中,並且要添加STG中的記錄。 – MatBailie