2016-09-21 45 views
0

我將Table1與列A和Table2與列B.SQL Query根據條件爲temp列指定值

當我使用join時,(Table1.A = Table2.B)我需要創建一個臨時列「標記」並將標記值設置爲「1」以匹配記錄,而對於其餘記錄(表1.A!=表2.B)應該具有標記值「0」。

結果集應該包含來自表和標誌值的列。

在此先感謝。

回答

1

試用FULL OUTER JOIN

SELECT *,CASE WHEN t1.A = t2.B THEN 1 ELSE 0 END Flag 
FROM Table1 t1 
FULL OUTER JOIN Table2 t2 ON t1.A=t2.B 
+0

我認爲你需要按t2.B的要求編輯t2.A EMENT。 – Susang

+0

是的..這是一個錯字..糾正..謝謝.. :) –

1

您可以使用LEFT與ISNULL JOIN如下:

SELECT *,CASE WHEN t2.B IS NULL THEN 0 ELSE 1 END Flag 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.A=t2.B 

對於來自右表

SELECT *,CASE WHEN t1.A IS NULL OR t2.B IS NULL THEN 0 ELSE 1 END Flag 
FROM Table1 t1 
FULL OUTER JOIN Table2 t2 ON t1.A=t2.B 
+0

我想過這個,但這會考慮左側表只有正確的??? –

+0

是的,我們需要完整的外部才能從右表中顯示所有不匹配的值。讓我以不同的方式解決這個問題。謝謝 – Susang

0

檢查下面的例子也顯示無與倫比的價值:

DECLARE @tblA AS TABLE 
(
    ID INT, 
    A VARCHAR(50) 
) 

DECLARE @tblB AS TABLE 
(
    ID INT, 
    B VARCHAR(50) 
) 

INSERT INTO @tblA VALUES(1,'AA'), 
(2,'CCC'), 
(3,'DDD'), 
(4,'FFF') 

INSERT INTO @tblB VALUES(1,'AA'), 
(2,'BBB'), 
(3,'DDD'), 
(4,'KKK') 

SELECT 
    A.A, 
    B.B, 
    CASE ISNULL(B.B,'') WHEN '' THEN 0 ELSE 1 END AS Match 
FROM @tblA A 
LEFT JOIN @tblB B ON A.A=B.B