2017-10-18 1 views
1

내 문제는이 쿼리는 MainRule 테이블에 Table1 테이블과 일치하는 ID가있는 경우에만 작동한다는 것입니다. MainRule 테이블에 일치하는 ID가없는 경우에도 쿼리가 작동해야합니다. Table1의 레코드는 MainRule 테이블에 일치하는 레코드가없는 경우에도 표시되어야합니다.두 테이블 사이에 일치하지 않으면 내 데이터가 표시되지 않습니다

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

관련 문제