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。左側の結合には null があり、右側にはデータがありません。こちらの左側が ですmyCTE

于 2012-01-25T15:26:04.563 に答える