2017-10-18 68 views
1

我的问题是,只有MainRule表的ID与Table1表匹配时,此查询才有效。即使MainRule表没有匹配的ID,我也需要查询才能工作。即使MainRule表中没有匹配的记录,Table1中的记录也应该显示。我的数据不会显示,除非两个表之间匹配

这里是我的代码:

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 
+1

然后,您应该使用Table1作为查询的根,并将其连接到MainRule。 –

回答

0

你有两个问题:INNER JOIN(由对方的回答解释),以及WHERE D1.Status = 'UnCleared'

不管你的连接是什么,WHERE子句将排除没有匹配的MainRule行的行。

尝试类似WHERE D1.Status = 'UnCleared' OR D1.Status IS NULL

+0

是的!而已。你们都是最棒的! – tnbumbray

2

只需使用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(左表)中的所有行,即使没有匹配排在另一个表table1

你应该阅读有关连接类型之间的区别:

+0

其实,我需要的是相反的方式。即使MainRule表中没有匹配的行,我也需要table1中的行。 – tnbumbray

+0

@tnbumbray所以切换查询中的两个表。 –

+0

我已经尝试过,它仍然无法正常工作。我知道table1中有数据,因为当我删除中间的子查询时,我获得了数据。 – tnbumbray

相关问题