it-swarm-ko.tech

SQL Server : 사례 OR 다음 끝 => OR SUPER.

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. WHEN when_expression

    간단한 CASE 형식이 사용될 때 input_expression이 비교되는 간단한 표현식입니다. when_expression은 유효한 표현식입니다. input_expression 및 each 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 표현식에는 다음 두 가지 형식이 있습니다.

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

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