/ / SQL-Fall für WHERE-Klausel IN - SQL, Reporting-Services

SQL Case für WHERE-Klausel IN - SQL, Reporting-Services

Ich versuche, einen Berichtsparameter an a zu übergebengespeicherte Prozedur (@Time), die festlegt, welche Kategoriewerte in meinem Datensatz über die WHERE-Klausel zurückgegeben werden, und die Syntax nicht kennt, um dies korrekt zu bewerkstelligen vorher, aber nicht, wenn eine WHERE-Klausel IN ausgeführt werden muss.

DECLARE @Time AS NVARCHAR
SET @Time = "REG" --possible values of "REG" and "OT"

SELECT
f.[Category]    AS [Category]

FROM foo f

WHERE
@Time =
CASE @Time
WHEN "REG" THEN f.[Category] IN (A, B, C, D)
WHEN "OT" THEN f.[Category] IN (E, F, G)
END

Antworten:

0 für die Antwort № 1

Wenn Sie eine Zeichenvariable deklarieren, sollten Sie immer eine Länge angeben. Also deklarieren Sie @Time als ein Zeichen. Ich denke du willst 3 Zeichen.

Wenn Sie zweitens eine Variable nvarchar () deklarieren, weisen Sie ihr ein nvarchar () zu. Die Syntax lautet N "Reg" und nicht "Reg".

Drittens, was ist in der IN-Liste? Wollen Sie, dass dies Konstanten oder Spalten in den Daten sind?

Und schließlich möchten Sie für die WHERE-Klausel Folgendes:

WHERE (CASE WHEN @Time ="REG" and f.[Category] IN (A, B, C, D)  then "true"
WHEN @Time ="OT" THEN f.[Category] IN (E, F, G) then "true"
else "false"
end) = "true"

2 für die Antwort № 2

Sie können verwenden OR das zu ersetzen CASE mit einigen Abfrageeinschränkungen wie folgt:

DECLARE @Time AS NVARCHAR(3)
SET @Time = "REG" --possible values of "OT" and "REG"

SELECT
f.[Category] AS [Category]

FROM foo f

WHERE (@Time = "REG" and f.[Category] IN (A, B, C, D))
OR (@Time = "OT"  and f.[Category] IN (E, F, G))

END

1 für die Antwort № 3
SELECT f.[Category] AS [Category]
FROM foo f
WHERE (@Time = "REG" and f.[Category] IN (A, B, C, D))
or (@Time = "OT" and f.[Category] IN (E, F, G))