SQL 每个日期的服务器 CTE

SQL Server CTE For Each Date

我被困在这个时候,我需要为我的项目中的屏幕获取报告。

用户输入的是开始日期和结束日期... 在这些值之间的每一天,我都需要 "closed task count"。如果某些日期没有任务,计数应该 return "0"。到目前为止,我在这里,但我真的不明白我做错了什么。请帮忙!

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER PROCEDURE APP.GET_TASK_ENTRY_ACTIVE_GRAPH 
(
    @START_DATE DATETIME,
    @END_DATE DATETIME
)
AS
BEGIN
SET NOCOUNT ON

CREATE TABLE #TMP_TASK_VALS
(
    DATE_VALUE DATETIME,
    VAL INT
)

INSERT INTO #TMP_TASK_VALS
(
    DATE_VALUE, VAL
)
SELECT CONVERT(DATETIME, TASK_CLOSING_DATE), COUNT(1) FROM APP.TASK_ENTRIES (NOLOCK)
WHERE TASK_CLOSING_DATE BETWEEN @START_DATE AND @END_DATE
GROUP BY TASK_CLOSING_DATE
--ORDER BY TASK_CLOSING_DATE DESC

--SELECT * FROM #TMP_TASK_VALS

;WITH CTE_DAILY(DAY) AS
(
    SELECT @START_DATE AS DAY
    UNION ALL
    SELECT DAY + 1 FROM CTE_DAILY
    WHERE DAY < @END_DATE
)

SELECT CTE_DAILY.DAY, COUNT(VAL) FROM CTE_DAILY WITH (NOLOCK) LEFT JOIN #TMP_TASK_VALS WITH (NOLOCK) ON #TMP_TASK_VALS.DATE_VALUE = CTE_DAILY.DAY
GROUP BY CTE_DAILY.DAY

DROP TABLE #TMP_TASK_VALS

END
GO


/*
exec APP.GET_TASK_ENTRY_ACTIVE_GRAPH  '2015-08-10', '2015-08-16'
*/

结果就像,我有连续的所有日期,但值(计数)全为零。

干杯。

我观察到您在第一个查询中将 TASK_CLOSING_DATE 转换为日期时间,但在使用 BETWEEN 时却没有。我看到一些数据类型不匹配。请在加入 CTE 时尝试转换。

编辑:根据 OP 的反馈,问题在于日期和日期时间字段的转换。 OP 的评论: 将我的 DATETIME 转换为 DATE 完全解决了这个问题