SQL Server填写空行

时间:2018-12-17 20:35:34

标签: sql-server sql-insert data-warehouse window-functions sql-data-warehouse

下午好,

我有一个有趣的问题,我想把堆栈溢出社区。我们在数据仓库(SQL Server)中有一个数据集,该数据集具有唯一标识符,并且该标识符需要几个月的时间。例如,如果有人在2018年12月查看了此行,并在下面看到了以下行:

Row ID  BeginDate  EndDate       Unique ID   Amount
178484  2018-01-01 2018-01-31    GroupID1    387.22
176555  2018-03-01 2018-03-31    GroupID1    751.07
170120  2018-04-01 2018-04-30    GroupID1    567.48
172037  2018-09-01 2018-09-30    GroupID1    587.51
179024  2018-10-01 2018-10-31    GroupID1    63.42
182061  2018-11-01 2018-11-30    GroupID1    728.04

我们希望通过某种方式识别丢失的丢失行(月份)。例如,上面将插入以下行

  • 2月,5月,6月,7月,8月和12月最后输入的月份可以是查询运行的日期。

重要的是要注意,这显然不是数据库中唯一的行分组。此外,我们将避免使用游标。我们尝试使用一个游标和一个包含所有有效值的临时表来执行此操作。但我希望有一种更快的方法来解决这个问题。

对此,我们将不胜感激。

祝一切顺利, 乔治·埃瓦兹

2 个答案:

答案 0 :(得分:1)

简单

SELECT M MonthNumber,
       DATENAME(Month, DATEADD(Month, M, -1)) MonthName
FROM T RIGHT JOIN 
     (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)) TT(M)
ON MONTH(T.BeginDate) = TT.M
WHERE T.BeginDate IS NULL;

返回:

+-------------+-----------+
| MonthNumber | MonthName |
+-------------+-----------+
|           2 | February  |
|           5 | May       |
|           6 | June      |
|           7 | July      |
|           8 | August    |
|          12 | December  |
+-------------+-----------+

Demo

答案 1 :(得分:0)

请尝试使用“ NOT EXISTS”(不存在)脚本查看其是否满足您的要求。

Thread