Wie führe ich ein IF… THEN in einem SQL SELECT durch?


1508

Wie führe ich eine IF...THENin einer SQL SELECTAnweisung durch?

Zum Beispiel:

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

14
Vielleicht möchten Sie einen Blick auf diesen Link werfen . In Bezug auf: SQL WHERE-Klauseln: Vermeiden Sie CASE, verwenden Sie Boolesche Logik
Jemand

3
@Somebody: Nicht wirklich relevant, da der Artikel über die Verwendung logischer Umschreibregeln zum Konvertieren einer Implikation in eine Disjunktion spricht. Der Hinweis ist das Wort "logisch", dh etwas, das sich in wahr oder falsch auflöst und nicht für die Projektion gilt. TL; DR Artikel gilt für WHEREund CHECKaber nicht SELECT.
Tag, wenn

6
@ MartinSmiths Antwort ist die eleganteste - verwenden Sie IIF in SQL 2012+.
Murray Foxcroft

Antworten:


1760

Die CASEAnweisung kommt IF in SQL am nächsten und wird von allen Versionen von SQL Server unterstützt.

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

Sie müssen dies nur tun, CASTwenn Sie das Ergebnis als Booleschen Wert wünschen. Wenn Sie mit einem zufrieden sind int, funktioniert dies:

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

CASEAnweisungen können in andere CASEAnweisungen 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 ):

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

57
Nur ein zusätzliches Wort der Vorsicht, schließen Sie Ihre Bedingungen nicht in Klammern ein, wenn Sie den Koffer verwenden. Es hat ziemlich lange
gedauert

17
und vergessen Sie nicht das ENDE
Simon_Weaver

8
und das AS-Bit!
Cas Bloem

8
Fall, wenn, sonst und Ende parallel eingerückt werden sollten (entlang derselben Linie) - und nur dann weiter nach innen eingerückt werden sollten - funktioniert am besten für mich.
Ujjwal Singh

6
@ ReeveStrife Nur wenn SQL Server 2012+
stuartdotnet

327

Die case-Anweisung ist in dieser Situation Ihr Freund und hat eine von zwei Formen:

Der einfache Fall:

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Der erweiterte Fall:

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Sie können sogar case-Anweisungen in eine order by-Klausel einfügen, um eine wirklich ausgefallene Bestellung zu erhalten.


32
Ich weiß, dass dies alt ist, aber ich denke, es sollte beachtet werden, dass Sie ein AS Col_Namenach dem hinzufügen können, um ENDdie resultierende Spalte zu benennen
Ben

9
Ich habe immer das Gefühl, dass der zweite einfacher ist.
Hogan

4
Einverstanden bin, dass ich fast immer die erweiterte case-Anweisung verwende, da die Bedingungen, unter denen ich testen möchte, immer komplexer sind als nur die eine Variable selbst. Es fühlt sich für mich auch einfacher an zu lesen.
magnum_pi

1
Gute Erklärung für beide Situationen mit oder ohne Variable. Mit der Variablen muss die Bedingung eine Gleichheit zwischen der Variablen nach der case-Anweisung und derjenigen erfüllen, auf die Sie Ihre Bedingung stützen. Ohne Variable können Sie eine autarke Bedingung zum Testen hinzufügen.
Remus.A

Ich bin mit der zweiten Option bequemer. Die beiden sind gleich gut.
Stanley Okpala Nwosa

277

Ab SQL Server 2012 können Sie die IIFFunktion hierfür verwenden.

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

Dies ist praktisch nur eine Kurzschrift (wenn auch keine Standard-SQL-Schreibweise) CASE.

Ich bevorzuge die Prägnanz im Vergleich zur erweiterten CASEVersion.

Beide IIF()und CASElösen sich als Ausdrücke innerhalb einer SQL-Anweisung auf und können nur an genau definierten Stellen verwendet werden.

Der CASE-Ausdruck kann nicht zur Steuerung des Ausführungsflusses von Transact-SQL-Anweisungen, Anweisungsblöcken, benutzerdefinierten Funktionen und gespeicherten Prozeduren 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 IFSchlüsselwort.

IF @IncludeExtendedInformation = 1
  BEGIN
      SELECT A,B,C,X,Y,Z
      FROM   T
  END
ELSE
  BEGIN
      SELECT A,B,C
      FROM   T
  END

Manchmal muss jedoch darauf geachtet werden, dass bei diesem Ansatz keine Probleme mit dem Parameter-Sniffing auftreten .


6
Dies sollte die Antwort sein, wenn Sie eine IF .. then-Anweisung in SQL wünschen.
Mr.J

91

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 ):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

4
Eine interessante Diskussion finden Sie unter: meta.stackexchange.com/questions/103053/… . Die beiden von Ihnen bereitgestellten Links fügen zusätzlichen Kontext hinzu, den ich unterstütze.
Sam Saffron

2
Die Referenz ist wirklich nützlich und sehr empfehlenswert für den Fall zusätzlicher Details
Baymax

75

Anwendungsfall. Etwas wie das.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END

50
SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product

48

Microsoft SQL Server (T-SQL)

In einem select, verwenden:

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

whereVerwenden Sie in einer Klausel:

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end

1
warum würdest du nicht einfach where Obsolete = 'N' or InStock = 'Y'das wo praktisch
halbieren

46

Aus diesem Link können wir IF THEN ELSEin T-SQL verstehen :

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'ALFKI')
  PRINT 'Need to update Customer Record ALFKI'
ELSE
  PRINT 'Need to add Customer Record ALFKI'

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'LARSE')
  PRINT 'Need to update Customer Record LARSE'
ELSE
  PRINT 'Need to add Customer Record LARSE' 

Ist das nicht gut genug für T-SQL?


3
Dies ist nicht das, was der Anforderer wollte, aber es ist sehr nützlich zu wissen, dass Sie if-Anweisungen außerhalb einer select-Anweisung verwenden können.
Jonathan

2
EXISTS ist gut, weil es aus der Suchschleife austritt, wenn ein Element gefunden wird. Ein COUNT wird bis zum Ende der Tabellenzeilen ausgeführt. Nichts mit Fragen zu tun, aber etwas zu wissen.
JustJohn

45
 SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT

32

Einfache if-else-Anweisung in SQL Server:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

Verschachtelte If ... else-Anweisung in SQL Server -

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
  PRINT 'what''s up?';
ELSE
  PRINT 'Bye Ravi Anand.';
END;

GO

2
Spät, aber ist es innen verwendbar, SELECTwie OP gefragt hat?
Abdul Qayyum

25

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

1
Diese Antwort wiederholt (mit weniger Details), was bereits vor einigen Jahren in der Antwort von Martin Smith angegeben wurde.
jk7

1
@ jk7 Dies war die erste Antwort auf die Frage.
Sandeep Rawat

3
Nicht von dem, was ich sehe. Es heißt, Ihre Antwort wurde am 26. April 16 und Martin's am 20. Juli 11 veröffentlicht.
jk7

24

Verwenden Sie eine CASE-Anweisung:

SELECT CASE
       WHEN (Obsolete = 'N' OR InStock = 'Y')
       THEN 'Y'
       ELSE 'N'
END as Available

etc...

23

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

Siehe Arbeitsdemo: Wenn dann ohne casein SQL Server .

Zu Beginn müssen Sie den Wert trueund falsefür ausgewählte Bedingungen berechnen . Hier kommen zwei NULLIF :

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

kombiniert ergibt 1 oder 0. Verwenden Sie als nächstes bitweise Operatoren .

Es ist die WYSIWYG- Methode.


19
-1 für Code-Verschleierung. Im Ernst, das ist ungefähr so ​​weit von WYSIWYG entfernt, wie Sie nur können! Ein rötliches, unlesbares Durcheinander, und wenn ich an Ihrem Code arbeiten müsste, würde ich den ganzen Tag fluchen ... Entschuldigung: - /
Heliac

2
@Heliac setzen cte Teil in Ansicht und Sie werden nie das Chaos sehen. Für lange und komplizierte UND, ODER, NICHT, es ist besser lesbar als CASE (dieser Teil außerhalb von cte natürlich).
Tomasito

1
Ich habe dies eine +1 für die Ordentlichkeit gegeben, sobald es in einem cte ist, aber beachte, dass die Antwort derzeit für die Frage falsch ist. Du brauchst ein '|' kein '&'.
Mark Hurd

3
Stimme voll und ganz @Heliac zu. Obwohl es syntaktisch korrekt ist und gut funktioniert, ist es einfach nicht einfach zu unterstützen. Wenn Sie es in einen CTE einfügen, wird dieser nicht lesbare Code nur an eine andere Stelle verschoben.
objectNotFound

1
Die Tabellenmethode zur Überprüfung der Kombination könnte ihre Vorteile haben. Die Verwendung einer Tabellenvariablen und das Verknüpfen mit der vorhandenen Abfrage könnte eine satzbasierte Lösung ohne Fall liefern. Diese Antwort ist ein schlechtes Beispiel, aber die Tabellenidee selbst hat ihre Berechtigung.
Suncat2000

19
SELECT 1 AS Saleable, *
  FROM @Product
 WHERE ( Obsolete = 'N' OR InStock = 'Y' )
UNION
SELECT 0 AS Saleable, *
  FROM @Product
 WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )


14
case statement some what similar to if in SQL server

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

2
Könnten Sie bitte erklären, wie dies die gestellte Frage beantwortet?
Guanxi

@Guanxi: Obwohl nicht meine Antwort, verallgemeinert ein "Fall" ein "Wenn-Dann-Sonst" (von 2 Fällen zu vielen)
JosephDoggie

Können Sie das näher erläutern?
Peter Mortensen

13

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.

 CASE orweb2.dbo.Inventory.RegulatingAgencyName
    WHEN 'Region 1'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 2'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 3'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'DEPT OF AGRICULTURE'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
    ELSE (
            CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
                WHEN 1
                    THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
                ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
                END
            )
    END AS [County Contact Name]

1
Die Bearbeitung, mit der die Case-Anweisungen neu formatiert wurden, ist in Ordnung und verständlich und verständlicher, aber die SQL-Datei würde in der Ansicht, in der sie verwendet wird, immer noch zusammenfallen.
JustJohn

1
Ich CASEwandere nur umher, warum ich als Antwort hochgestuft und markiert werde, anstatt als die, IFdie die Antwort hätte sein sollen, wie diese, dies ist immer noch eine CASEAussage, keine IF.
Mr.J

@ Mr.J: Obwohl nicht meine Antwort, verallgemeinert ein "Fall" ein "Wenn-Dann-Sonst" (von 2 Fällen zu vielen)
JosephDoggie

12

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:

INSERT INTO customers (last_name, first_name, city)
    SELECT 'Doe', 'John', 'Chicago' FROM dual
    WHERE NOT EXISTS 
        (SELECT '1' from customers 
            where last_name = 'Doe' 
            and first_name = 'John'
            and city = 'Chicago');

4
Die Tags sagen SQL Server, TSQL
Malachi

11

Als alternative Lösung zur CASEAussage kann ein tabellengesteuerter Ansatz verwendet werden:

DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
INSERT INTO @Product VALUES
(1,'N','Y'),
(2,'A','B'),
(3,'N','B'),
(4,'A','Y')

SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
FROM
    @Product P
    LEFT JOIN
        ( VALUES
            ( 'N', 'Y', 1 )
        ) Stmt (Obsolete, InStock, Saleable)
        ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete

Ergebnis:

ID          Obsolete   InStock    Saleable
----------- ---------- ---------- -----------
1           N          Y          1
2           A          B          0
3           N          B          1
4           A          Y          1

Verkaufbar wird in welcher Bedingung in Abfrage verwendet?
Bhavin Thummar

Es kann in wo Zustand verwendet werden.
Serkan Arslan

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

6

Für diejenigen, die SQL Server 2012 verwenden, ist IIF eine Funktion, die hinzugefügt wurde und als Alternative zu Case-Anweisungen fungiert.

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

1
Diese Antwort wiederholt (mit weniger Details), was bereits vor einigen Jahren in der Antwort von Martin Smith angegeben wurde.
jk7

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

7
Hallo Surjeet Singh Bisht; Ihr Code mag korrekt sein, aber mit einem gewissen Kontext würde er eine bessere Antwort geben. Sie könnten beispielsweise erklären, wie und warum diese vorgeschlagene Änderung das Problem des Fragestellers lösen würde, möglicherweise einschließlich eines Links zu der entsprechenden Dokumentation. Dies würde es für sie nützlicher machen und auch für andere Site-Leser, die nach Lösungen für ähnliche Probleme suchen.
Vince Bowdren

5
Diese Antwort fügt nichts Neues hinzu. Tatsächlich ist genau diese Zeile seit über 5 Jahren Teil der akzeptierten Antwort .
SL Barth - Wiedereinsetzung Monica

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

5

Sie haben zwei Möglichkeiten, um dies tatsächlich zu implementieren:

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

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

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

4

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;

Die Verwendung von Aliasen - pin diesem Fall - hilft, Probleme zu vermeiden.


3

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.

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

1
Hört sich gut an. Vielleicht ein oder zwei Worte, um es zu erklären?
JQSOFT

Es ist genau wie bei normalen If / Else-Anweisungen. Wenn der veraltete Wert = 'N' oder der InStock-Wert = 'Y' ist, ist die Ausgabe 1. Andernfalls ist die Ausgabe 0.
Tharuka

1
Vielen Dank. Bitte bearbeiten Sie Ihren Beitrag, um diese Erklärung hinzuzufügen. Gefällt If..Then...Else..SQL
mir

2
SELECT 
  CAST(
    CASE WHEN Obsolete = 'N' 
    or InStock = 'Y' THEN ELSE 0 END AS bit
  ) as Saleable, * 
FROM 
  Product

8
Aus dem Test: Willkommen bei Stack Overflow! Bitte antworten Sie nicht nur mit dem Quellcode. Versuchen Sie, eine schöne Beschreibung der Funktionsweise Ihrer Lösung zu geben. Siehe: Wie schreibe ich eine gute Antwort? . Danke
sɐunıɔ ןɐ qɐp

3
Ich denke, Sie werden feststellen, dass dies nicht ausgeführt wird, da keine Ausgabe nach dem Schlüsselwort 'THEN' fehlt.
Dodecaphone

Können Sie das näher erläutern?
Peter Mortensen

2

Es wird so etwas sein:

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;

Können wir den QuantityText-Wert in der where-Bedingung in einer Abfrage verwenden? zum BeispielSELECT 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';
Bhavin Thummar

1

Der Vollständigkeit halber möchte ich hinzufügen, dass SQL dreiwertige Logik verwendet. Der Ausdruck:

obsolete = 'N' OR instock = 'Y'

Könnte drei unterschiedliche Ergebnisse liefern:

| obsolete | instock | saleable |
|----------|---------|----------|
| Y        | Y       | true     |
| Y        | N       | false    |
| Y        | null    | null     |
| N        | Y       | true     |
| N        | N       | true     |
| N        | null    | true     |
| null     | Y       | true     |
| null     | N       | null     |
| null     | null    | null     |

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:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false'
           ELSE NULL
       END AS saleable

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:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           ELSE 'false' -- either false or null
       END AS saleable

0

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:

SELECT

   if(GENDER = "M","Male","Female") as Gender

FROM ...

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:

if(condition, true, false)

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.)


0

Sie können Case Statement verwenden:

Select 
Case WHEN (Obsolete = 'N' or InStock = 'Y') THEN 1 ELSE 0 END Saleable,
Product.*
from Product
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.