2017-08-15 70 views
2

我使用SQL Server 2012中,我需要編寫一個查詢,會做給我下面的輸出:如何編寫一個T-Sql查詢,如果表A中的列中的值與表B中的列中的值匹配,則會輸出1,否則爲0?

Code  Value 
FRBAR  0 
ENSPA  1 
DEWINE  1 
    ... 

爲了實現上述目標,我在我的數據庫,即表A 2代特定表工作和表B.表A具有名爲CodeA的列和表B具有名爲CodeB的列。

我想編寫一個T-sql查詢,將列CodeA中的所有值與列CodeB中的值匹配並輸出上面提到的結果。

我知道我需要在這兩列上做一個JOIN,但我很困惑如何實現返回1的邏輯,如果有匹配,否則返回0。

回答

3

您需要使用FULL OUTER JOIN

SELECT CASE 
      WHEN CodeA IS NOT NULL THEN CodeA 
      ELSE CodeB 
     END AS Code, 
     CASE 
      WHEN CodeA IS NOT NULL AND CodeB IS NOT NULL THEN 0 
      ELSE 1 
     END AS Value 
FROM TableA 
FULL OUTER JOIN TableB ON CodeA = CodeB 

如果有匹配的查詢將輸出1Value。否則,查詢將輸出0以及非空值代碼值。

注:使用LEFT JOIN將只在一個方向檢查,即只對一個表中沒有在其他表中存在的代碼。如果您想在兩個方向中檢查,那麼您必須使用FULL JOIN

1

您應該使用LEFT OUTER JOINTableA即使再有就是從TableB沒有符合條件的記錄採取的所有記錄,然後使用case-when-else結構依靠沒有造成記錄TableB部分(檢查is NULL)。

select TableA.CodeA Code, 
case when 
TableB.CodeB is null then 0 
else 1 
end Value 
from TableA left outer join TableB on TableA.CodeA = TableB.CodeB 
0

使用LEFT JOIN。如果不匹配,這將與Code列上的兩個表匹配並返回NULL。然後您可以使用CASE來相應地返回0或1。

0

我會用CASELEFT JOIN

SELECT A.codeA code, 
     CASE WHEN B.codeB IS NULL THEN 0 ELSE 1 END 
FROM A 
LEFT JOIN B ON A.codeA = B.codeB 
相關問題