1

我的数据结构如下:

在此处输入图像描述

使用以下 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)

我创建了一个如下所示的“日期集”:

在此处输入图像描述

问题是:原始数据集中的某些数据在 CTE 中没有对应的日期(在提供的示例中,数据中不存在 2012-01-24 6:00)。

对于这些缺失的数据点,我希望将“NULL”视为它们的值。我想我也许可以利用我生成的 CTE 中的日期,但我不确定我该怎么做。

我尝试过这样的事情但没有成功:

SELECT C.DateValue, D.Value 
FROM myCTE C 
LEFT OUTER JOIN myData D ON C.DateValue = D.Date
ORDER BY C.DateValue ASC;
4

2 回答 2

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) 
于 2012-01-25T16:49:39.403 回答
0

你想要一个RIGHT OUTER JOIN,而不是一个LEFT OUTER JOIN。左连接在右边缺失数据的地方有空值;这里的左边是myCTE

于 2012-01-25T15:26:04.563 回答