除非两个表之间匹配,否则我的数据不会显示

My data will not show unless there is a match between the two tables

我的问题是只有当 MainRule table 的 ID 与 Table1 table 匹配时,此查询才有效。即使 MainRule table 没有匹配的 ID,我也需要查询才能工作。即使 MainRule table.

中没有匹配的记录,表 1 中的记录也应该显示

这是我的代码:

SELECT  Person, OrderNum, Name, County, SubmitDate, Days1, 
        SUM(Date_Diff) - 1 AS [Number of Uncleared Days] 
  From
     (SELECT D1.RecordID AS Person, D3.[case no] AS OrderNum, 
             D3.FullName AS Name, D3.County, D3.[SignedDate] AS SubmitDate,
                  DATEDIFF(d, D3.[SignedDate], D3.closedate) AS Days1,
                  DATEDIFF(DAY, [HoldDate],
                  (SELECT TOP 1 [StatusDate]
                     FROM [MainRule] D2
                    WHERE D2.Status = 'Cleared' 
                      AND D1.RecordID = D2.RecordID 
                      AND D1.StatusDate < D2.StatusDate)) AS [Date_Diff]
        FROM [MainRule] AS D1 INNER JOIN table1 AS D3 ON D3.ID = D1.RecordID
       WHERE D1.Status = 'UnCleared') SubQ 
WHERE (SubmitDate BETWEEN '10/01/2017' and '10/17/2017')
GROUP BY Person, OrderNum, Name, County, SubmitDate, Days1

只需使用 LEFT JOIN 即可:

SELECT  Person, OrderNum, Name, County, SubmitDate, Days1, 
        SUM(Date_Diff) - 1 AS [Number of Uncleared Days] 
  From
     (SELECT D1.RecordID AS Person, D3.[case no] AS OrderNum, 
             D3.FullName AS Name, D3.County, D3.[SignedDate] AS SubmitDate, 
                  DATEDIFF(d, D3.[SignedDate], D3.closedate) AS Days1, 
                  DATEDIFF(DAY, [HoldDate],                                                      
                  (SELECT TOP 1 [StatusDate]
                     FROM [MainRule] D2
                    WHERE D2.Status = 'Cleared' 
                      AND D1.RecordID = D2.RecordID 
                      AND D1.StatusDate < D2.StatusDate)) AS [Date_Diff]
        FROM table1 AS D3
        LEFT JOIN [MainRule] AS D1 ON D3.ID = D1.RecordID
       WHERE D1.Status = 'UnCleared')  SubQ 
WHERE (SubmitDate BETWEEN '10/01/2017' and '10/17/2017')
GROUP BY Person, OrderNum, Name, County, SubmitDate, Days1

这样您将获得 MainRule(左侧 table)中的所有行,即使其他 table table1 中没有匹配的行。

您应该详细了解联接类型之间的区别:

您有两个问题:INNER JOIN(如其他答案所述)和 WHERE D1.Status = 'UnCleared'

无论您的联接是什么,WHERE 子句都会排除没有匹配 MainRule 行的行。

试试 WHERE D1.Status = 'UnCleared' OR D1.Status IS NULL.