Wie führe ich eine IF...THEN
in einem SQL SELECT
Aussage?
Zum Beispiel:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
Wie führe ich eine IF...THEN
in einem SQL SELECT
Aussage?
Zum Beispiel:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
Eine neue Funktion, IIF (die wir einfach verwenden können), wurde in SQL Server 2012 hinzugefügt:
SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
Diese Antwort wiederholt (mit weniger Details), was bereits bereits in der Antwort von Martin Smith enthalten vor einigen Jahren.
Verwenden Sie reine Bitlogik:
DECLARE @Product TABLE (
id INT PRIMARY KEY IDENTITY NOT NULL
,Obsolote CHAR(1)
,Instock CHAR(1)
)
INSERT INTO @Product ([Obsolote], [Instock])
VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')
;
WITH cte
AS
(
SELECT
'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
,*
FROM
@Product AS p
)
SELECT
'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
,*
FROM
[cte] c
Ver Arbeitsdemo: wenn dann ohne case
in SQL Server .
Für den Anfang müssen Sie den Wert von true
y false
für ausgewählte Bedingungen. Hier kommen zwei NULLIF :
for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)
ergibt zusammen 1 oder 0. Als nächstes verwenden Sie bitweise Operatoren .
Es ist die wichtigste WYSIWYG Methode.
-1 für Code-Verschleierung. Im Ernst, das ist so weit von WYSIWYG entfernt, wie man nur sein kann! Ein verdammt unlesbares Durcheinander, und wenn ich an Ihrem Code arbeiten müsste, würde ich den ganzen Tag fluchen... sorry :-/
@Heliac setzen cte Teil in View und Sie werden nie sehen, das Chaos. Bei langen und komplizierten AND, OR, NOT ist es lesbarer als CASE (der Teil außerhalb von cte natürlich).
Ich habe dem Ganzen ein +1 für die Übersichtlichkeit gegeben, sobald es in einem CTE steht, aber beachte, dass die Antwort für die Frage derzeit falsch ist. Sie brauchen einen "|" und kein "&".
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
17 Stimmen
Das sollten Sie sich ansehen Link . Bezüglich: SQL WHERE-Klauseln: Vermeiden Sie CASE, verwenden Sie boolesche Logik
4 Stimmen
@Somebody: Das ist nicht wirklich relevant, denn in dem Artikel geht es darum, logische Umschreibregeln zu verwenden, um eine Implikation in eine Disjunktion umzuwandeln. Der Hinweis ist das Wort "logisch", d. h. etwas, das sich in wahr oder falsch auflöst, was für die Projektion nicht zutrifft. TL;DR Artikel gilt für
WHERE
yCHECK
aber nichtSELECT
.7 Stimmen
Die Antwort von @MartinSmith ist die eleganteste - verwenden Sie IIF in SQL 2012+.