Using CASE in WHERE-Anweisung, wenn der Parameter mehrere Werte hat
Ich habe ein Problem, das sich meiner Meinung nach auf einen Parameter mit mehreren Werten bezieht.
n meiner TblActivity gibt es zwei FelderTblActivity.ActivityServActId
undTblActivity.ActivityContractId
, das ich in meine WHERE-Anweisung aufnehmen möchte.
as Filtern nach diesen ist optional. Wenn der Benutzer 'Ja' für den Parameter @ wäh@YESNOActivity
, dann möchte ich die Abfrage filtern und nach Zeilen suchen, in denenTblActivity.ActivityServActId
entspricht einer der Optionen im Parameter@ServiceActivity
.
Das gleiche gilt für das@YESNOContract
, TblActivity.ActivityContractId
und@Contract
beziehungsweis
Ich habe es geschafft:
WHERE
(CASE WHEN @YESNOActivity = 'Yes' THEN TblActivity.ActivityServActId ELSE 0 END)
IN (CASE WHEN @YESNOActivity = 'Yes' THEN @ServiceActivity ELSE 0 END)
AND (CASE WHEN @YESNOContract = 'Yes' THEN TblActivity.ActivityContractId ELSE 0 END)
IN (CASE WHEN @YESNOContract = 'Yes' THEN @Contract ELSE 0 END)
Der Code funktioniert jedoch einwandfrei, wenn im Parameter @ nur ein Wert ausgewählt is@ServiceActivity
oder@Contract
, sobald ich mehr als einen Wert in diesen Parametern habe, erhalte ich den Fehler:
Incorrect syntax near ','.
Query execution failed for dataset 'Activity'. (rsErrorExecutingCommand)
An error has occurred during report processing. (rsProcessingAborted)
ann jemand sehen, was ich falsch mache? Ich könnte es verstehen, wenn ich ein = anstelle von IN in der WHERE-Anweisung hätte, aber dieses nicht herausfinden kann.
Verwenden von SQL Server 2008 und SSRS 2008-r2