복붙노트

[SQL] OR은 SQL Server의 CASE 문이 지원되지 않습니다

SQL

OR은 SQL Server의 CASE 문이 지원되지 않습니다

case 문의 WHEN 절에 OR 연산자는 지원되지 않습니다. 이걸 어떻게 할 수 있습니까?

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

해결법

  1. ==============================

    1.그 형식 중 하나를 사용해야합니다 :

    그 형식 중 하나를 사용해야합니다 :

    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 
    
  2. ==============================

    2.

    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 
    
  3. ==============================

    3.

    CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
      ELSE 'WECS 9520' 
    END as wecs_system 
    
  4. ==============================

    4.당신은 때 그 표현 중 하나를 사용할 수 있지만이 둘을 혼합 할 수 없습니다.

    당신은 때 그 표현 중 하나를 사용할 수 있지만이 둘을 혼합 할 수 없습니다.

    당신은 프로그램 수 :

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

  5. ==============================

    5.CASE에 대한 답변을 많이가 이미 있습니다. 어떻게 CASE를 사용할 때 나는 설명 할 것이다.

    CASE에 대한 답변을 많이가 이미 있습니다. 어떻게 CASE를 사용할 때 나는 설명 할 것이다.

    당신은 SQL 쿼리의 아무 곳이나 CASE 표현식을 사용할 수 있습니다. CASE 표현식은 SELECT 문 내에서 사용할 수 있습니다 WHERE 절에 의해 조항, 주문, HAVING 절, ​​삽입, UPDATE 및 DELETE 문.

    CASE 표현식은 다음과 같은 두 가지 형식이있다 :

    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
    

    CASE 식 2.Update 문

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

    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
    

    CASE 표현식으로 절을 4.Having

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

    이 사용 사례는 미래에 누군가가 도움이되기를 바랍니다.

    출처

  6. ==============================

    6.시험

    시험

    CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
    
  7. ==============================

    7.

    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;
    
  8. ==============================

    8.

    select id,phno,case gender
    when 'G' then 'M'
    when 'L' then 'F'
    else
    'No gender'
    end
    as gender 
    from contacts
    
  9. ==============================

    9.

    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의 집합에 값 원하는 =

  10. ==============================

    10.

    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 
    
  11. from https://stackoverflow.com/questions/5487892/or-is-not-supported-with-case-statement-in-sql-server by cc-by-sa and MIT license