Ich habe versucht, mich umzuschauen, aber ich konnte nichts finden, was mir helfen würde.
Ich versuche dies in SQL zu tun:
declare @locationType varchar(50);
declare @locationID int;
SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
WHEN 'location' THEN account_location = @locationID
WHEN 'area' THEN xxx_location_area = @locationID
WHEN 'division' THEN xxx_location_division = @locationID
Ich weiß, dass ich nicht '= @locationID' am Ende jedes einzelnen setzen muss, aber ich kann die Syntax nicht annähernd korrekt wiedergeben. SQL beschwert sich immer wieder über mein '=' in der ersten WHEN-Zeile ...
Wie kann ich das machen?
sql
switch-statement
case
Meilen
quelle
quelle
ohne fallaussage ...
quelle
DECLARE @locationType NVARCHAR(50) = 'youchoose' IF @locationType = 'location' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (account_location = @locationID) END IF @locationType = 'area' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_area = @locationID) END IF @locationType = 'division' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_division = @locationID) END
Bitte schön.
quelle
Ich würde sagen, dies ist ein Indikator für eine fehlerhafte Tabellenstruktur. Möglicherweise sollten die verschiedenen Standorttypen in verschiedenen Tabellen getrennt werden, damit Sie viel umfangreichere Abfragen durchführen und überflüssige Spalten vermeiden können.
Wenn Sie die Struktur nicht ändern können, funktioniert möglicherweise Folgendes:
Und so weiter ... Wir können die Struktur der Abfrage nicht im laufenden Betrieb ändern, aber wir können sie überschreiben, indem wir die Prädikate gleich machen.
EDIT: Die obigen Vorschläge sind natürlich viel besser, ignorieren Sie einfach meine.
quelle
Das Problem dabei ist, dass die SQL-Engine beim Auswerten des Ausdrucks den FROM-Teil überprüft, um die richtigen Tabellen abzurufen, und dann den WHERE-Teil, um einige Basiskriterien bereitzustellen, sodass eine dynamische Bedingung für die Spalte nicht ordnungsgemäß ausgewertet werden kann prüfen gegen.
Sie können eine WHERE-Klausel verwenden, wenn Sie die WHERE-Kriterien im Prädikat überprüfen, z
In Ihrem speziellen Fall müssen Sie die Abfrage in eine gespeicherte Prozedur stellen oder drei separate Abfragen erstellen.
quelle
Der OP-Operator kann eine Alternative sein, wenn er sich in einem Zustand befindet
quelle
Bitte versuchen Sie diese Abfrage. Antwort auf den obigen Beitrag:
quelle
Versuche dies:
quelle
quelle
quelle
Versuchen Sie diese Abfrage. Es ist sehr leicht zu verstehen:
quelle