2017-08-15 1 views
2

ich SQL Server 2012 verwenden und ich brauche eine Abfrage zu schreiben, die die folgende Ausgabe geben Sie mir tun würden:Wie schreibe ich eine T-SQL-Abfrage, die 1 ausgeben würde, wenn der Wert in einer Spalte in Tabelle A mit dem Wert in einer Spalte in Tabelle B übereinstimmt, sonst 0?

Code  Value 
FRBAR  0 
ENSPA  1 
DEWINE  1 
    ... 

die oben Um das zu erreichen, habe ich mit zwei spezifischen Tabellen in meiner Datenbank arbeite, nämlich Tabelle A und Tabelle B. Tabelle A hat eine Spalte mit der Bezeichnung CodeA und Tabelle B hat eine Spalte mit der Bezeichnung .

Ich möchte eine T-SQL-Abfrage schreiben, die alle Werte in Spalte CodeA mit denen in Spalte CodeB übereinstimmen würde und das oben erwähnte Ergebnis ausgeben.

Ich weiß, ich muss eine JOIN auf diese 2 Spalten tun, aber ich bin verwirrt darüber, wie die Logik der Rückgabe einer 1 wenn es eine Übereinstimmung und eine 0 andernfalls.

Antwort

3

Sie benötigen einen FULL OUTER JOIN verwenden:

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 

Wenn es eine Übereinstimmung der Abfrageausgabe 1 als Value Wille. Andernfalls gibt die Abfrage 0 zusammen mit dem Codewert nicht null aus.

Hinweis: Mit einem LEFT JOINnur, das heißt nur in eine Richtung für Codes in einer Tabelle überprüfen wird, die in der anderen Tabelle nicht existieren. Wenn Sie in beide Richtungen überprüfen möchten, müssen Sie eine FULL JOIN verwenden.

1

sollten Sie LEFT OUTER JOIN verwenden, um alle Datensätze aus TableA selbst dann zu nehmen, gibt es keine passenden Datensätze aus TableB und dann case-when-else Struktur verwenden auf die Abwesenheit von unter Berufung TableB Teil Satz (is NULL Überprüfung) der zur Folge hat.

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

Verwenden Sie LEFT JOIN. Dies entspricht den beiden Tabellen in der Spalte Code und gibt NULL zurück, wenn keine Übereinstimmung vorhanden ist. Sie können dann CASE verwenden, um 0 oder 1 entsprechend zurückzugeben.

0

ich CASE verwenden würde und LEFT 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 
Verwandte Themen