web-dev-qa-db-ja.com

SQL Serverの場合 OR その他の終わり=> the OR サポートされていません

ORステートメントのWHEN文節のCASEはサポートされていません。これどうやってするの?

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

その形式では、次のいずれかを使用する必要があります。

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 
1016
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 
237
Darren
CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
55
Cade Roux

WHENが持つ表現の1つを使用できますが、両方を混在させることはできません。

  1. いつwhen_expression

    単純なCASE形式が使用されている場合にinput_expressionが比較される単純な式です。 when_expressionは任意の有効な式です。 input_expressionとそれぞれのwhen_expressionのデータ型は同じであるか、暗黙的な変換である必要があります。

  2. 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)を参照してください。

48
Alfaplus

CASEに関してはすでにたくさんの答えがあります。 CASEをいつどのように使用するかを説明します。

SQLクエリのどこでもCASE式を使用できます。 CASE式は、SELECT文、WHERE句、Order by句、HAVING句、Insert、UPDATE、およびDELETEステートメント内で使用できます。

CASE式は、以下の2つの形式を取ります。

  1. 単純な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のデータ型は同じであるか、暗黙的な変換である必要があります。

  2. 検索したCASE式

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

    この式は、結果を見つけるためにブール式のセットを評価します。この式では、各ブール式で比較演算子、および論理演算子AND/ORを使用できます。

CASE式を含む1.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式を使用した3.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)

このユースケースが将来誰かに役立つことを願っています。

出典

33
Somnath Muluk

やってみる

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
31
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;
26
Archu
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts
2
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
2
Anand agrawal