2017-10-18 4 views
1

この問題は、MainRuleテーブルのIDがTable1テーブルと一致する場合にのみ発生します。 MainRuleテーブルに一致するIDがない場合でも、クエリが動作する必要があります。 MainRuleテーブルに一致するレコードがない場合でも、Table1のレコードが表示されるはずです。ここで2つのテーブルの間に一致がない限り、データは表示されません

は私のコードです:

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

次の2つの問題を抱えている: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クエリ内の2つのテーブルを切り替えます。 –

+0

私はそれを試みましたが、それはまだ動作していません。私は中間のサブクエリを削除するとデータが得られるので、table1にデータがあることを知っています。 – tnbumbray

関連する問題