OR
Operatora w WHEN
klauzuli CASE
oświadczenie nie jest obsługiwany. W jaki sposób mogę to zrobić?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
OR
Operatora w WHEN
klauzuli CASE
oświadczenie nie jest obsługiwany. W jaki sposób mogę to zrobić?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Odpowiedzi:
Ten format wymaga użycia:
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
W przeciwnym razie użyj:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
działałoby, gdybyś porównywał do pojedynczej wartości. Jednak (22978, 23218, 23219)
jest tablicą i IN
konieczne jest, aby dopasować tylko jedną z wartości.
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
IN
słowa kluczowego jest znacznie lepszym sposobem
Możesz użyć jednego z wyrażeń WHEN, ale nie możesz mieszać obu z nich.
KIEDY kiedy_wyrażenie
Jest prostym wyrażeniem, do którego porównywane jest wyrażenie_wejściowe, gdy używany jest prosty format CASE. wyrażenie_czasu jest dowolnym poprawnym wyrażeniem. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.
KIEDY wyrażenie logiczne
Czy wyrażenie logiczne jest oceniane podczas korzystania z przeszukiwanego formatu CASE. Wyrażenie boolowskie to dowolne prawidłowe wyrażenie boolowskie.
Możesz zaprogramować:
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
Ale w każdym razie można oczekiwać, że ranking zmiennych zostanie porównany w wyrażeniu logicznym.
Zobacz CASE (Transact-SQL) (MSDN).
Istnieje już wiele odpowiedzi w odniesieniu do CASE
. Wyjaśnię, kiedy i jak korzystać CASE
.
Możesz używać wyrażeń CASE w dowolnym miejscu zapytań SQL. Wyrażeń CASE można używać w instrukcjach SELECT, klauzulach WHERE, klauzulach Sortuj według, klauzul HAVING, instrukcjach Insert, UPDATE i DELETE.
Wyrażenie CASE ma następujące dwa formaty:
Proste wyrażenie CASE
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
To porównuje wyrażenie do zestawu prostych wyrażeń, aby znaleźć wynik. To wyrażenie porównuje wyrażenie do wyrażenia w każdej klauzuli WHEN pod kątem równoważności. Jeśli wyrażenie w klauzuli WHEN jest dopasowane, wyrażenie w klauzuli THEN zostanie zwrócone.
To tutaj spada pytanie PO. 22978 OR 23218 OR 23219
nie otrzyma wartości równej wyrażeniu tj. ebv.db_no. Dlatego daje błąd. Typy danych wyrażenia wejściowego i każdego wyrażenia when muszą być takie same lub muszą być konwersją niejawną.
Szukano wyrażeń CASE
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
To wyrażenie ocenia zestaw wyrażeń boolowskich w celu znalezienia wyniku. To wyrażenie pozwala operatorom porównania oraz operatorom logicznym AND / OR z każdym wyrażeniem logicznym.
1. Instrukcja SELECT z wyrażeniami CASE
--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. Instrukcja aktualizacji z wyrażeniem CASE
-- 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. Klauzula ORDER BY z wyrażeniami CASE
-- 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. Klauzula z wyrażeniem CASE
-- 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)
Mam nadzieję, że te przypadki użycia pomogą komuś w przyszłości.
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;
ELSE Sales
pola, które zwraca wartość domyślną, jeśli nie jest zawarte w instrukcji case, odpowiednie dla zapytań biznesowych.
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender
from contacts
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
= Nazwa tabeli, na której chcesz wykonać operację.
column_name
= Nazwa kolumny / pola, której wartość chcesz ustawić.
update_value
= Wartość, którą chcesz ustawić column_name
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,
case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional
item' end 'Promotion'
From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
inner join tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2 and s.isSerialBased=0