sql - 即使特定范围内没有任何数据,如何返回空数据?

标签 sql sql-server

我想从表中返回特定日期范围的数据。为此,我有一个接受 @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/

相关文章:

SQL Server - 查找下过两种订单的所有客户

java - 单表的递归迭代器

sql - 无法绑定(bind)多部分标识符?

.net - 是否有包含 RowVersion 值的 Microsoft.SqlServer.Management.Smo.SqlDataType 的替代方法?

c# - 如何在asp.net中动态生成HTML和CSS?

SQL SERVER 使用 Offset 计算不同值

sql - 我如何将 Case 语句的 Null 值返回到 Group by

c# - SQL 用户类型问题

SQL Server : expand rows and transpose columns

sql - 根据另一列的字母顺序递增 "sequence"列