我想从表中返回特定日期范围的数据。为此,我有一个接受 @fromDate
和 @toDate
参数的存储过程。
sql 如下所示:
DECLARE @fromDate DATETIME, @toDate DATETIME
SET @fromDate = '2017-04-01'
SET @toDate = '2017-04-07'
SELECT MD.ID, MD.Name, RT.Result, RT.DateOn
FROM MainData MD
LEFT JOIN ResultsTable RT
RT.MainDataID = MD.ID
WHERE RT.DateOn >= @fromDate AND RT.DateOn <= @toDate
这按预期工作并返回此范围内的结果,但我的问题是即使 ResultsTable
中没有结果,我也想返回空结果。基本上,如果我请求 7 天的结果,我应该得到 7 个结果,其中部分或全部结果可能不存在。
我尝试创建一个包含此范围内的日期的虚拟表,但我不确定如何将其与其他 sql 连接:
INSERT INTO #tempDates
SELECT DATEADD(DAY, nbr - 1, @fromDate)
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, @fromDate, @toDate)
任何帮助将不胜感激
最佳答案
将日期条件从 WHERE
子句移至 ON
子句:
SELECT MD.ID, MD.Name, RT.Result, RT.DateOn
FROM MainData MD
LEFT JOIN ResultsTable RT
ON RT.MainDataID = MD.ID AND
RT.DateOn BETWEEN @fromDate AND @toDate
关于sql - 即使特定范围内没有任何数据,如何返回空数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43339031/