1

我有一些增量提取,我将它们导入 SQL Server 到一个名为的新表中Import.table,然后将其加载到事实表中。该Import.table表每天都会被截断,这就是我被要求维护事实表的原因Fact.table。这将有历史数据。我正在从名为的事实表创建一个报告表,该表fact.tablereporting应该有一个DeletedDeletedDate列。一开始我被要求只创建Deleted简单的标志列,所以我创建了一个带有 case 语句的派生列。

select *, deleted= case when ([ClientId] in (select [ClientId] from fact.table
except 
select clientid from Import.table)) then '1' else '0' end
from fact.table

后来我被要求DeletedDate根据记录被标记为已删除的日期添加列。这造成了我的问题。因为提取是增量的,并且每天都会处理相同的行,所以当我尝试将其创建为派生列时,该DeletedDate列将使用当天的日期进行更新。

select *, deleted= case when ([ClientId] in (select [ClientId] from fact.table
except 
select clientid from import.table)) then '1' else '0' end
, deleteddate= case when ([ClientId] in (select [ClientId] from fact.table
except 
select clientid from Import.table)) then getdate() else null end
from fact.Table

有没有一种方法可以忽略已经用日期标记的行,只更新那些刚刚删除的行?我不确定派生列是否也是正确的方法。我真的很感激这方面的帮助。

4

0 回答 0