Wie führe ich eine IF...THEN
in einer SQL SELECT
Anweisung durch?
Zum Beispiel:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Eric Labashosky
quelle
quelle
WHERE
undCHECK
aber nichtSELECT
.Antworten:
Die
CASE
Anweisung kommt IF in SQL am nächsten und wird von allen Versionen von SQL Server unterstützt.Sie müssen dies nur tun,
CAST
wenn Sie das Ergebnis als Booleschen Wert wünschen. Wenn Sie mit einem zufrieden sindint
, funktioniert dies:CASE
Anweisungen können in andereCASE
Anweisungen eingebettet und sogar in Aggregaten enthalten sein.SQL Server Denali (SQL Server 2012) fügt die IIF- Anweisung hinzu, die auch im Zugriff verfügbar ist (von Martin Smith hervorgehoben ):
quelle
Die case-Anweisung ist in dieser Situation Ihr Freund und hat eine von zwei Formen:
Der einfache Fall:
Der erweiterte Fall:
Sie können sogar case-Anweisungen in eine order by-Klausel einfügen, um eine wirklich ausgefallene Bestellung zu erhalten.
quelle
AS Col_Name
nach dem hinzufügen können, umEND
die resultierende Spalte zu benennenAb SQL Server 2012 können Sie die
IIF
Funktion hierfür verwenden.Dies ist praktisch nur eine Kurzschrift (wenn auch keine Standard-SQL-Schreibweise)
CASE
.Ich bevorzuge die Prägnanz im Vergleich zur erweiterten
CASE
Version.Beide
IIF()
undCASE
lösen sich als Ausdrücke innerhalb einer SQL-Anweisung auf und können nur an genau definierten Stellen verwendet werden.Wenn Ihre Anforderungen durch diese Einschränkungen nicht erfüllt werden können (z. B. die Notwendigkeit, abhängig von einer bestimmten Bedingung unterschiedlich geformte Ergebnismengen zurückzugeben), verfügt SQL Server auch über ein prozedurales
IF
Schlüsselwort.Manchmal muss jedoch darauf geachtet werden, dass bei diesem Ansatz keine Probleme mit dem Parameter-Sniffing auftreten .
quelle
Sie finden einige schöne Beispiele in The Power of SQL CASE-Anweisungen , und ich denke, die Anweisung, die Sie verwenden können, wird ungefähr so aussehen (von 4guysfromrolla ):
quelle
Anwendungsfall. Etwas wie das.
quelle
quelle
Microsoft SQL Server (T-SQL)
In einem
select
, verwenden:where
Verwenden Sie in einer Klausel:quelle
where Obsolete = 'N' or InStock = 'Y'
das wo praktischAus diesem Link können wir
IF THEN ELSE
in T-SQL verstehen :Ist das nicht gut genug für T-SQL?
quelle
quelle
Einfache if-else-Anweisung in SQL Server:
Verschachtelte If ... else-Anweisung in SQL Server -
quelle
SELECT
wie OP gefragt hat?Eine neue Funktion, IIF (die wir einfach verwenden können), wurde in SQL Server 2012 hinzugefügt:
quelle
Verwenden Sie eine CASE-Anweisung:
quelle
Verwenden Sie reine Bitlogik:
Siehe Arbeitsdemo: Wenn dann ohne
case
in SQL Server .Zu Beginn müssen Sie den Wert
true
undfalse
für ausgewählte Bedingungen berechnen . Hier kommen zwei NULLIF :kombiniert ergibt 1 oder 0. Verwenden Sie als nächstes bitweise Operatoren .
Es ist die WYSIWYG- Methode.
quelle
quelle
quelle
quelle
Dies ist keine Antwort, sondern nur ein Beispiel für eine CASE-Anweisung, die bei meiner Arbeit verwendet wird. Es hat eine verschachtelte CASE-Anweisung. Jetzt wissen Sie, warum meine Augen gekreuzt sind.
quelle
CASE
wandere nur umher, warum ich als Antwort hochgestuft und markiert werde, anstatt als die,IF
die die Antwort hätte sein sollen, wie diese, dies ist immer noch eineCASE
Aussage, keineIF
.Wenn Sie Ergebnisse zum ersten Mal in eine Tabelle einfügen, anstatt Ergebnisse von einer Tabelle in eine andere zu übertragen, funktioniert dies in Oracle 11.2g:
quelle
Als alternative Lösung zur
CASE
Aussage kann ein tabellengesteuerter Ansatz verwendet werden:Ergebnis:
quelle
quelle
Für diejenigen, die SQL Server 2012 verwenden, ist IIF eine Funktion, die hinzugefügt wurde und als Alternative zu Case-Anweisungen fungiert.
quelle
quelle
Sie haben zwei Möglichkeiten, um dies tatsächlich zu implementieren:
Verwenden von IIF, das von SQL Server 2012 eingeführt wurde:
Verwenden von
Select Case
:quelle
Frage:
ANSI:
Die Verwendung von Aliasen -
p
in diesem Fall - hilft, Probleme zu vermeiden.quelle
Die Verwendung von SQL CASE entspricht den normalen If / Else-Anweisungen. In der folgenden Abfrage: Wenn der veraltete Wert = 'N' oder der InStock-Wert = 'Y' ist, ist die Ausgabe 1. Andernfalls ist die Ausgabe 0. Dann setzen wir diesen 0- oder 1-Wert unter die verkaufsfähige Spalte.
quelle
If..Then...Else..
SQL
quelle
Es wird so etwas sein:
quelle
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Der Vollständigkeit halber möchte ich hinzufügen, dass SQL dreiwertige Logik verwendet. Der Ausdruck:
Könnte drei unterschiedliche Ergebnisse liefern:
Wenn zum Beispiel ein Produkt veraltet ist, Sie aber nicht wissen, ob das Produkt instock ist, wissen Sie nicht, ob das Produkt verkaufsfähig ist. Sie können diese dreiwertige Logik wie folgt schreiben:
Sobald Sie herausgefunden haben, wie es funktioniert, können Sie drei Ergebnisse in zwei Ergebnisse konvertieren, indem Sie das Verhalten von null festlegen. Zum Beispiel würde dies null als nicht verkaufsfähig behandeln:
quelle
Ich mag die Verwendung der CASE-Anweisungen, aber die Frage nach einer IF-Anweisung in SQL Select. Was ich in der Vergangenheit verwendet habe, war:
Es ist wie bei den IF-Anweisungen von Excel oder Sheets, bei denen eine Bedingung gefolgt von der wahren Bedingung und dann der falschen Bedingung vorliegt:
Außerdem können Sie die if-Anweisungen verschachteln (aber dann sollte use ein CASE verwenden :-)
(Hinweis: Dies funktioniert in MySQLWorkbench, aber möglicherweise nicht auf anderen Plattformen.)
quelle
Sie können Case Statement verwenden:
quelle