2017-11-23 7 views
1

テーブルAのすべてのインスタンスを返し、テーブルBの特定の結果セットに一致するクエリを持っていますが、テーブルBからの一致、私はまだテーブルAの結果が必要ですが、テーブルBの結果はnull値です。たとえば :あるテーブルに存在し、別のテーブルに存在しない結果を返す

Table A 
Person1 | Date1 | Info1 
Person2 | Date2 | Info2 
Person4 | Date4 | Info4 

Table B 
Person2 | Details2 
Person3 | Details3 
Person5 | Details5 

Desired result 
Person1 | Date1 | Info1 | NULL 
Person2 | Date2 | Info2 | Details2 
Person4 | Date4 | Info4 | NULL 

は現在、私のレポートでは、私は必要なもののほとんどを行いますが、それは、そのようなPERSON1やPerson4などのインスタンスのいずれかを戻すために失敗しました。テーブル2に一致する結果がないインスタンスは戻されません。これはwhere句のためであると想定しています。 LEFT JOINを使ってみましたが、明らかにこれはうまくいきませんでした。私はUNIONを使ってもしようとしましたが、無駄です。

助けていただけたら幸いです!

SELECT t1.[Person1] 
    , t1.[forename] 
    , t1.[surname] 
    ,CONVERT(VARCHAR(10), t1.[aDate], 103) + ' ' + convert(VARCHAR(8), t1.[aDate], 14) Admit 
    ,CONVERT(VARCHAR(10), t1.[disDate], 103) + ' ' + convert(VARCHAR(8), t1.[disDate], 14) Discharge 
    , t1.[wa] 
    , t1.[sp] 
    , t2.title 
    ,CONVERT(VARCHAR(10), t2.DocDate, 103) + ' ' + convert(VARCHAR(8), t2.DocDate, 14) DocDate 
FROM [DB1].[dbo].[table1] t1 
JOIN [DB2].[dbo].[table2] t2 
ON t1. Person1 = t2. Person2 
WHERE CAST(t2.DocDate AS DATE) BETWEEN CAST(t1.aDate AS DATE) and 
CAST(t1.disDate AS DATE) 
AND t2.title like '%ischarg%' 
ORDER BY t1.Person1 ASC, t1.aDate DESC 

答えて

1

LEFT JOINが必要です。あなたはフィルタリング条件に注意する必要があります:

SELECT . . . 
FROM [DB1].[dbo].[table1] t1 LEFT JOIN 
    [DB2].[dbo].[table2] t2 
     ON t1. Person1 = t2. Person2 AND 
     CAST(t2.DocDate AS DATE) BETWEEN CAST(t1.aDate AS DATE) and 
CAST(t1.disDate AS DATE) AND 
     t2.title like '%ischarg%' 
ORDER BY t1.Person1 ASC, t1.aDate DESC; 

テーブル上の任意の条件がON条件に移動する必要があります。最初のテーブルの条件はWHERE句に入れることができます。完全にトリックをしたにかかわらず、試合は右の表に存在するかどうかのすべての左テーブル(あなたのケースでTABLE1)から

+0

!ありがとう – peterbonar

0

変更JOIN [DB2].[dbo].[table2] t2LEFT JOIN

LEFT JOIN [DB2].[dbo].[table2] t2に戻ります(表2)

関連する問題