OR은 SQL Server의 CASE 문에서 지원되지 않습니다
OR
연산자
WHEN
(A)의 절
CASE
문이 지원되지 않습니다. 어떻게해야합니까?
CASE ebv.db_no WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system
이 형식을 사용하려면 다음 중 하나를 사용해야합니다.
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
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
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system
WHEN에있는 표현식 중 하나를 사용할 수 있지만 둘을 혼합 할 수는 없습니다.
- 언제 when_expression단순 CASE 형식이 사용될 때 input_expression이 비교되는 단순 표현식입니다. when_expression은 유효한 표현식입니다. input_expression 및 각 when_expression의 데이터 유형은 동일하거나 내재적 변환이어야합니다.
- 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
그러나 어쨌든 변수 순위가 부울 식으로 비교 될 것으로 기대할 수 있습니다.
(MSDN)를 참조하십시오 .
와 관련하여 이미 많은 답변이
CASE
있습니다. 언제 어떻게 사용하는지 설명하겠습니다
CASE
.SQL 쿼리의 어느 곳에서나 CASE 표현식을 사용할 수 있습니다. CASE 표현식은 SELECT 문, WHERE 절, Order by 절, HAVING 절, Insert, UPDATE 및 DELETE 문에서 사용할 수 있습니다.CASE 표현식에는 다음 두 가지 형식이 있습니다.
- 간단한 CASE 표현
결과를 찾기 위해 표현식을 간단한 표현식 세트와 비교합니다. 이 표현식은 표현식을 동등성에 대해 각 WHEN 절의 표현식과 비교합니다. WHEN 절 내의 표현식이 일치하면 THEN 절의 표현식이 리턴됩니다.이것은 OP의 질문이 떨어지는 곳입니다.CASE expression WHEN expression1 THEN Result1 WHEN expression2 THEN Result2 ELSE ResultN END
ebv.db_no 표현식과 같은 값을 얻지 못합니다. 그것이 오류를 일으키는 이유입니다. input_expression 및 각 when_expression의 데이터 유형은 동일하거나 내재적 변환이어야합니다.22978 OR 23218 OR 23219
- 검색된 CASE 표현식
이 표현식은 부울 표현식 세트를 평가하여 결과를 찾습니다. 이 표현식을 사용하면 각 부울 표현식에서 비교 연산자 및 논리 연산자 AND / OR을 사용할 수 있습니다.CASE WHEN Boolean_expression1 THEN Result1 WHEN Boolean_expression2 THEN Result2 ELSE ResultN END
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
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
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
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)
이 사용 사례가 미래에 누군가를 도울 수 있기를 바랍니다.
시험
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
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;
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
참고 URL :
https://stackoverflow.com/questions/5487892/or-is-not-supported-with-case-statement-in-sql-server
도움이 되겠다면 ↓↓↓ 배너 한번만 클릭 해주시면 감사합니다 ^^
'programing' 카테고리의 다른 글
jQuery 선택기 정규 표현식 (0) | 2020.02.09 |
---|---|
ssh 원격 호스트 식별이 변경되었습니다 (0) | 2020.02.09 |
Windows 용 Git에서 파일 이름이 너무 깁니다 (0) | 2020.02.09 |
.NET에서 객체의 딥 카피를 어떻게 수행합니까 (구체적으로 C #)? (0) | 2020.02.09 |
문자열에서 구두점을 제거하는 가장 좋은 방법 (0) | 2020.02.09 |