Ich möchte zwei Wertesätze vergleichen und sehen, ob es Schnittpunkte gibt. Der erste Wertesatz wird zur Laufzeit angegeben und der zweite Wertesatz wird in einer Zeile einer Datenbank gespeichert.
Hier sind einige Beispielcodes:
CREATE TABLE #tab1 (var1 INT, var2 INT , var3 INT)
INSERT INTO #tab1
VALUES (1,2,3),(0,0,0),(0,4,0)
Select
a = (case when 1 IN (var1,var2,var3) OR
2 IN (var1,var2,var3) OR
3 IN (var1,var2,var3)
THEN 1 else 0 end)
from #tab1
Ich halte den Code für zu umständlich und frage mich, ob es einen einfachen Weg gibt, dies zu tun. Vielen Dank!
sql-server
Jason
quelle
quelle
Antworten:
Bei drei Setup-Eingaben und einer separaten Wertetabelle funktioniert der folgende Code.
Ich denke, das ist es, wonach Sie gesucht haben, wenn Sie 'in' nicht verwenden wollten. Um ehrlich zu sein, würde ich 'in' verwenden. Es ist viel einfacher und einfacher zu schreiben. Der obige Code brauchte einige Zeit, um zu funktionieren. Ich würde Ihren In-Code jedoch wie folgt aktualisieren:
quelle
Sie können nur
JOIN
zu realen oder dynamisch abgeleiteten Tabellen:Wenn die Liste sehr lang wäre, würde ich sie wahrscheinlich im Voraus in einer # temp-Tabelle erstellen, anstatt sie in der Anweisung auszuführen, aber die
JOIN
und -LogikEXISTS
wäre dieselbe.Ebenso könnten wir
INTERSECT
anstelle vonJOIN
:Test bei dbfiddle.uk .
quelle
Sie können anstelle von CASE Folgendes versuchen
quelle
Wenn Sie die Variablen nicht behalten müssen, können Sie eine Schleife wie z.
... aber das ist nicht tischig. Wir sind Datenbankadministratoren und verwenden Tabellen.
quelle