1774 Stimmen

Wie führe ich ein IF...THEN in einem SQL SELECT aus?

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

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 y CHECK aber nicht SELECT .

7 Stimmen

Die Antwort von @MartinSmith ist die eleganteste - verwenden Sie IIF in SQL 2012+.

8voto

Sie haben zwei Möglichkeiten, dies tatsächlich umzusetzen:

  1. Verwendung von IIF, das mit SQL Server 2012 eingeführt wurde:

    SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
  2. Verwendung von Select Case :

    SELECT CASE
        WHEN Obsolete = 'N' or InStock = 'Y'
            THEN 1
            ELSE 0
        END as Saleable, *
        FROM Product

8voto

Tharuka Punkte 141

Die Verwendung von SQL CASE ist genau wie normale If/Else-Anweisungen. In der unten stehenden Abfrage, wenn veraltet Wert = 'N' oder wenn InStock Wert = 'Y' dann Ausgabe wird 1 sein. Andernfalls wird der Wert 0 ausgegeben. Dann wird der Wert 0 oder 1 unter der Spalte "Verkaufbar" eingetragen.

SELECT
      CASE 
        WHEN obsolete = 'N' OR InStock = 'Y' 
        THEN 1 
        ELSE 0 
      END AS Salable
      , * 
FROM PRODUCT

1 Stimmen

Es ist genau wie normale If/Else-Anweisungen. Wenn der veraltete Wert = 'N' oder wenn der InStock-Wert = 'Y' ist, wird 1 ausgegeben. Andernfalls wird der Wert 0 ausgegeben.

2 Stimmen

Ich danke Ihnen. Bitte Editar Ihren Beitrag um diese Erklärung zu ergänzen. Zum Beispiel: Die If..Then...Else.. Verwendung von Aussagen in SQL wie folgt....

5voto

  SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product

7 Stimmen

Hallo Surjeet Singh Bisht; Ihr Code mag zwar korrekt sein, aber mit etwas Kontext wäre er eine bessere Antwort. Sie könnten zum Beispiel erklären, wie und warum diese vorgeschlagene Änderung das Problem des Fragestellers lösen würde, vielleicht mit einem Link zur entsprechenden Dokumentation. Das würde die Antwort für den Fragesteller nützlicher machen, und auch für andere Leser der Website, die nach Lösungen für ähnliche Probleme suchen.

5 Stimmen

Diese Antwort fügt nichts Neues hinzu. Tatsächlich war genau diese Zeile bereits Teil der akzeptierten Antwort seit über 5 Jahren .

2 Stimmen

Darüber hinaus ist es wichtig zu erwähnen, dass die IIF gilt nur für SQL Server ab 2012

5voto

David Cohn Punkte 69

Frage:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

ANSI:

Select 
  case when p.Obsolete = 'N' 
  or p.InStock = 'Y' then 1 else 0 end as Saleable, 
  p.* 
FROM 
  Product p;

Verwendung von Aliasen -- p in diesem Fall - wird dazu beitragen, Probleme zu vermeiden.

5voto

yusuf hayırsever Punkte 616
SELECT
if((obsolete = 'N' OR instock = 'Y'), 1, 0) AS saleable, *
FROM
product;

CodeJaeger.com

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.

Powered by:

X