回答:
この形式では、次のいずれかを使用する必要があります。
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
それ以外の場合は、次を使用します。
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
単一の値と比較している場合に機能します。ただし、(22978, 23218, 23219)
は配列でありIN
、値の1つだけに一致する必要があります。
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
キーワードを使用する方がはるかに良い方法です
WHENの式のいずれかを使用できますが、両方を混在させることはできません。
いつwhen_expression
単純なCASE形式が使用されるときにinput_expressionが比較される単純な式です。when_expressionは任意の有効な式です。input_expressionと各when_expressionのデータ型は同じであるか、暗黙的な変換である必要があります。
WHEN Boolean_expression
検索されたCASE形式を使用するときに評価されるブール式です。Boolean_expressionは、任意の有効なブール式です。
あなたはプログラムすることができます:
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
しかし、いずれの場合でも、変数のランキングがブール式で比較されることを期待できます。
CASE(Transact-SQL)(MSDN)を参照してください。
に関してはすでに多くの回答がありますCASE
。いつ、どのように使うか説明しますCASE
。
SQLクエリ内の任意の場所でCASE式を使用できます。CASE式は、SELECTステートメント、WHERE句、Order by句、HAVING句、Insert、UPDATE、およびDELETEステートメント内で使用できます。
CASE式には次の2つの形式があります。
単純なCASE式
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
これは、式を単純な式のセットと比較して結果を見つけます。この式は、式を各WHEN句の式と比較して同等であるかどうかを調べます。WHEN句内の式が一致した場合、THEN句内の式が返されます。
ここでOPの問題が解決されます。22978 OR 23218 OR 23219
式に等しい値、つまりebv.db_noを取得しません。それがエラーを出している理由です。input_expressionと各when_expressionのデータ型は同じであるか、暗黙的な変換である必要があります。
検索されたCASE式
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
この式は、ブール式のセットを評価して結果を見つけます。この式では、各ブール式で比較演算子と論理演算子AND / ORを使用できます。
1. CASE式を使用したSELECTステートメント
--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. 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.CASE式を使用したORDER BY句
-- 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. 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)
このユースケースが将来誰かを助けることを願っています。
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
ビジネスクエリに適した、caseステートメントに他に含まれていない場合にデフォルト値を返すフィールドが含まれているため、賛成票を投じます。
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
=操作を実行するテーブルの名前。
column_name
=値を設定する列/フィールドの名前。
update_value
=設定する値 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