返回參照此SO post添加另一組成遞歸CTE
如果有一個分組類別「類別」,其中,爲了簡單起見,可以是X或Y - 是一件小事修正本腳本這樣它會爲每個類別添加缺失的日期?
我認爲該類別需要添加到CTE中?
換句話說,如果我有以下初始表:
...我怎麼以下幾點:
,很快會上傳我嘗試
我已經調用了初始表#x。我希望能適應遞歸CTE查詢像下面包含的字段類別:
DECLARE @MinDate DATETIME;
SET @MinDate = (SELECT Min(DATE) FROM #x)
DECLARE @MaxDate DATETIME;
SET @MaxDate = (SELECT Max(DATE) FROM #x)
;WITH times AS
(
SELECT @MinDate dt , 1 depth
UNION ALL
SELECT
DATEADD(d, depth, @MinDate) dt
, 1 + depth as depth
FROM times
WHERE DATEADD(d, depth, @MinDate) <= @MaxDate
)
SELECT
*
FROM
TIMES t
LEFT OUTER JOIN #X x
ON
t.dt = x.Date
好 - 我綁包括CROSS JOIN,但它錯誤地擴大的事:
SELECT DISTINCT Category INTO #Cat FROM #x
DECLARE @MinDate DATETIME;
SET @MinDate = (SELECT Min(DATE) FROM #x)
DECLARE @MaxDate DATETIME;
SET @MaxDate = (SELECT Max(DATE) FROM #x)
;WITH times AS
(
SELECT
Category
, @MinDate dt
, 1 depth
FROM #Cat
UNION ALL
SELECT
c.Category
, DATEADD(d, depth, @MinDate) dt
, 1 + depth as depth
FROM
times t
CROSS JOIN #Cat c
--ON c.Category IS NOT NULL
WHERE DATEADD(d, depth, @MinDate) <= @MaxDate
)
SELECT
*
FROM
TIMES
這似乎已經確定的工作:
SELECT DISTINCT Category INTO #Cat FROM #x
DECLARE @MinDate DATETIME;
SET @MinDate = (SELECT Min(DATE) FROM #x)
DECLARE @MaxDate DATETIME;
SET @MaxDate = (SELECT Max(DATE) FROM #x)
;WITH times AS
(
SELECT
Category
, @MinDate dt
, 1 depth
FROM #Cat
UNION ALL
SELECT
Category
, DATEADD(d, depth, @MinDate) dt
, 1 + depth as depth
FROM
times t
WHERE DATEADD(d, depth, @MinDate) <= @MaxDate
)
SELECT
*
FROM
TIMES
爲小提琴網站+1正如我以前從未見過的那樣!在OP中 - 最後一個查詢在WITH子句中有一個交叉連接;這是一個有效的替代 – whytheq
這是怎麼不起作用? http://sqlfiddle.com/#!3/df6751/6 – whytheq
@whytheq請檢查我的修改答案。因爲您在父查詢中需要它,所以我已將類別放在最初的CTE生成中。我會檢查你的小提琴並回到你身邊。 –