我的数据结构如下:
使用以下CTE:
WITH DateRange AS
(
SELECT CAST('2012-01-24 06:00' AS DATETIME) DateValue
UNION ALL
SELECT DATEADD(mi, 1, DateValue)
FROM DateRange
WHERE DATEADD(mi, 1, DateValue) <= '2012-01-24 12:00'
)
SELECT DateValue FROM DateRange
OPTION (MAXRECURSION 0)
我创建了一个&#34;日期集&#34;看起来像这样:
问题是:原始数据集中有一些数据在CTE中没有相应的日期(在提供的示例中,2012-01-24 6:00不是存在于数据中)。
对于这些缺失的数据点,我希望看到&#34; NULL&#34;作为他们的价值。我以为我可以利用我生成的CTE中的日期,但我不确定如何做到这一点。
我尝试过这样的事情但没有成功:
SELECT C.DateValue, D.Value
FROM myCTE C
LEFT OUTER JOIN myData D ON C.DateValue = D.Date
ORDER BY C.DateValue ASC;
答案 0 :(得分:1)
我无法复制你所看到的问题。我在下面创建了查询并对其进行了测试,它运行正常 - 您可以在您的环境中测试吗?
Declare @var as Table (DateValue datetime)
Insert Into @var (DateValue) Values ('2012-01-24 06:01:00.000')
Insert Into @var (DateValue) Values ('2012-01-24 06:02:00.000')
Insert Into @var (DateValue) Values ('2012-01-24 06:03:00.000')
;WITH DateRange AS (
SELECT CAST('2012-01-24 06:00' AS DATETIME) DateValue
UNION ALL
SELECT DATEADD(mi, 1, DateValue)
FROM DateRange
WHERE DATEADD(mi, 1, DateValue) <= '2012-01-24 12:00'
)
SELECT dr.DateValue, v.DateValue
FROM DateRange dr
Left Outer Join @var v On dr.DateValue = v.DateValue
Order By v.DateValue
OPTION (MAXRECURSION 0)
答案 1 :(得分:0)
您需要RIGHT OUTER JOIN
,而不是LEFT OUTER JOIN
。左连接有空值,右侧缺少数据;这里的左侧是myCTE
。