it-swarm.com.de

SQL Server: FALL WENN OR THEN ELSE END => das OR wird nicht unterstützt

Die OR in der WHEN -Klausel einer CASE -Anweisung wird nicht unterstützt. Wie kann ich das machen?

CASE ebv.db_no 
    WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' 
    ELSE 'WECS 9520' 
END as wecs_system 
549
Werner

Für dieses Format müssen Sie Folgendes verwenden:

CASE ebv.db_no 
  WHEN 22978 THEN 'WECS 9500' 
  WHEN 23218 THEN 'WECS 9500'  
  WHEN 23219 THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 

Ansonsten verwende:

CASE  
  WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
1045
OMG Ponies
CASE
  WHEN ebv.db_no = 22978 OR 
       ebv.db_no = 23218 OR
       ebv.db_no = 23219
  THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
241
Darren
CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
56
Cade Roux

Sie können einen der Ausdrücke von WHEN verwenden, aber nicht beide mischen.

  1. WANN wann_Ausdruck

    Ist ein einfacher Ausdruck, mit dem input_expression verglichen wird, wenn das einfache CASE-Format verwendet wird. when_expression ist ein beliebiger gültiger Ausdruck. Die Datentypen von input_expression und when_expression müssen identisch sein oder implizit konvertiert werden.

  2. WENN Boolescher_Ausdruck

    Wird der Boolesche Ausdruck bei Verwendung des durchsuchten CASE-Formats ausgewertet? Boolean_expression ist ein beliebiger gültiger Boolescher Ausdruck.

Sie könnten programmieren:

1.

    CASE ProductLine
            WHEN 'R' THEN 'Road'
            WHEN 'M' THEN 'Mountain'
            WHEN 'T' THEN 'Touring'
            WHEN 'S' THEN 'Other sale items'
            ELSE 'Not for sale'

2.

    CASE
            WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
            WHEN ListPrice < 50 THEN 'Under $50'
            WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
            WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
            ELSE 'Over $1000'
          END

In jedem Fall können Sie jedoch davon ausgehen, dass die Rangfolge der Variablen in einem booleschen Ausdruck verglichen wird.

Siehe CASE (Transact-SQL) (MSDN).

49
Alfaplus

Es gibt bereits viele Antworten in Bezug auf CASE. Ich werde erklären, wann und wie CASE verwendet wird.

Sie können CASE-Ausdrücke überall in den SQL-Abfragen verwenden. CASE-Ausdrücke können in den Anweisungen SELECT, WHERE, Order by, HAVING, Insert, UPDATE und DELETE verwendet werden.

Ein CASE-Ausdruck hat die folgenden zwei Formate:

  1. Einfacher CASE-Ausdruck

    CASE expression
    WHEN expression1 THEN Result1
    WHEN expression2 THEN Result2
    ELSE ResultN
    END
    

    Dadurch wird ein Ausdruck mit einer Reihe einfacher Ausdrücke verglichen, um das Ergebnis zu finden. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Äquivalenzklausel. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.

    Hier stellt sich die Frage des OP. 22978 OR 23218 OR 23219 erhält keinen Wert, der dem Ausdruck entspricht, d. H. Ebv.db_no. Deshalb gibt es einen Fehler. Die Datentypen von input_expression und when_expression müssen identisch sein oder implizit konvertiert werden.

  2. Durchsuchte CASE-Ausdrücke

    CASE
    WHEN Boolean_expression1 THEN Result1
    WHEN Boolean_expression2 THEN Result2
    ELSE ResultN
    END
    

    Dieser Ausdruck wertet eine Reihe von booleschen Ausdrücken aus, um das Ergebnis zu finden. Dieser Ausdruck erlaubt Vergleichsoperatoren und logische Operatoren UND/ODER in jedem Booleschen Ausdruck.

1. SELECT-Anweisung mit CASE-Ausdrücken

--Simple CASE expression: 
SELECT FirstName, State=(CASE StateCode
 WHEN 'MP' THEN 'Madhya Pradesh' 
 WHEN 'UP' THEN 'Uttar Pradesh' 
 WHEN 'DL' THEN 'Delhi' 
 ELSE NULL 
 END), PayRate
FROM dbo.Customer

-- Searched CASE expression:
SELECT FirstName,State=(CASE 
 WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
 WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
 WHEN StateCode = 'DL' THEN 'Delhi' 
 ELSE NULL 
 END), PayRate
FROM dbo.Customer

2.Update-Anweisung mit CASE-Ausdruck

-- Simple CASE expression: 
UPDATE Customer 
SET StateCode = CASE StateCode
 WHEN 'MP' THEN 'Madhya Pradesh' 
 WHEN 'UP' THEN 'Uttar Pradesh' 
 WHEN 'DL' THEN 'Delhi' 
 ELSE NULL 
 END 

-- Simple CASE expression: 
UPDATE Customer 
SET StateCode = CASE 
 WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
 WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
 WHEN StateCode = 'DL' THEN 'Delhi' 
 ELSE NULL 
 END 

3.ORDER BY-Klausel mit CASE-Ausdrücken

-- Simple CASE expression: 
SELECT * FROM dbo.Customer
ORDER BY 
 CASE Gender WHEN 'M' THEN FirstName END Desc,
 CASE Gender WHEN 'F' THEN LastName END ASC

-- Searched CASE expression: 
SELECT * FROM dbo.Customer
ORDER BY 
 CASE WHEN Gender='M' THEN FirstName END Desc,
 CASE WHEN Gender='F' THEN LastName END ASC

4.Having-Klausel mit CASE-Ausdruck

-- Simple CASE expression: 
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M' 
 THEN PayRate 
 ELSE NULL END) > 180.00
 OR MAX(CASE Gender WHEN 'F' 
 THEN PayRate 
 ELSE NULL END) > 170.00)

-- Searched CASE expression: 
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M' 
 THEN PayRate 
 ELSE NULL END) > 180.00
 OR MAX(CASE WHEN Gender = 'F' 
 THEN PayRate 
 ELSE NULL END) > 170.00)

Hoffe, diese Anwendungsfälle helfen jemandem in Zukunft.

Quelle

37
Somnath Muluk

Versuchen

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
34
JNK
SELECT
  Store_Name,
  CASE Store_Name
    WHEN 'Los Angeles' THEN Sales * 2
    WHEN 'San Diego' THEN Sales * 1.5
    ELSE Sales
    END AS "New Sales",
  Txn_Date
FROM Store_Information;
28
Archu
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts
3
Debendra Dash
UPDATE table_name 
  SET column_name=CASE 
WHEN column_name in ('value1', 'value2',.....) 
  THEN 'update_value' 
WHEN column_name in ('value1', 'value2',.....) 
  THEN 'update_value' 
END

table_name = Der Name der Tabelle, für die Sie eine Operation ausführen möchten.

column_name = Der Name der Spalte/des Feldes, dessen Wert Sie festlegen möchten.

update_value = Der Wert, den Sie für column_name festlegen möchten

3
Anand agrawal