SQL- 当前季度的数据必须被截断并重新加载,但上一季度的数据应该保持不变

标签 sql sql-server ssis

假设有两个季度 Q1、Q2、Q3、Q4
Q1为20160331,Q2为20160630。
我需要编写一个查询来加载表,每次加载表时,我都需要删除给定的季度记录并使用给定的季度记录重新加载它们。
一旦我从 Q1 移动到 Q2,我不应该触及 Q1 记录,只有 Q2 记录应该被截断和重新加载。
@UseDate 是具有当前给定季度日期的变量 QuarterKey 包含加载记录的季度日期。
Stg 具有当前给定的季度数据。 Stg 始终是截断重载。
Fact 应该删除当前季度日期并重新加载它。

IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Fact]') AND type in (N'U') 
AND (SELECT COUNT(*) FROM [dbo].[Fact]) >0)
BEGIN
DELETE FROM [dbo].[Fact] 
WHERE  (SELECT MAX(QuarterKey) FROM [Fact] ) = @UseDate
END
INSERT INTO [dbo].[Fact]
SELECT * from stg
Where (SELECT MAX(QuarterKey) FROM [Stg] ) = @UseDate

当我加载 Q2 时使用此查询,Q1 数据将被删除。
从我的想法来看,这是一个小的修复,但我无法修复它。
你能帮帮我吗?

最佳答案

如果您的@usedate 具有类似 20160331 的值,那么我们需要从中提取季度,然后从 fact 中删除具有相同季度的记录。

DELETE FROM [dbo].[Fact] 
WHERE  Datepart(Quarter,Quarterkey) = datepart(Quarter,@useDate);

INSERT INTO [dbo].[Fact]
SELECT * from stg
Where Datepart(Quarter,Quarterkey) not in (select 
datepart(Quarter,@UseDate);

如果@UseDate 已经有提取的季度数据,性能会更高效

关于SQL- 当前季度的数据必须被截断并重新加载,但上一季度的数据应该保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45366064/

相关文章:

sql-server - SSIS - 动态循环多个数据库

mysql - 找不到 SQL 语法错误

.net - .net 4.5 和 Entity Framework 中的外部应用

ssis - 替换 SSIS 中一列中的所有值

sql - 同时从 SQL 获取内容和计数

c# - 更改 EDMX 中所有表的架构名称

c# - 使用 SSIS 数据流任务从平面文件源以编程方式派生列

mysql - 如何使用 SQL 偏移表列?

mysql - 在连接查询中设置表名

sql - 更新行为