[SQL] WHERE IN 절에서 SQL 사용 CASE 문
SQLWHERE IN 절에서 SQL 사용 CASE 문
이 where 절에서의 사건을 사용할 수 있습니까? 이 같은:
DECLARE @Status VARCHAR(50);
SET @Status='published';
SELECT * FROM Product P
WHERE P.Status IN (CASE WHEN @Status='published' THEN (1,3)
WHEN @Status='standby' THEN (2,5,9,6)
WHEN @Status='deleted' THEN (4,5,8,10)
ELSE (1,3)
END)
이 코드는 오류가 있습니다 : 근처의 구문이 잘못되었습니다 ','.
해결법
-
==============================
1.아니 당신은 다음과 같은 경우를 사용하고있는 수 없습니다. 하지만 당신은 할 수있다
아니 당신은 다음과 같은 경우를 사용하고있는 수 없습니다. 하지만 당신은 할 수있다
SELECT * FROM Product P WHERE @Status='published' and P.Status IN (1,3) or @Status='standby' and P.Status IN (2,5,9,6) or @Status='deleted' and P.Status IN (4,5,8,10) or P.Status IN (1,3)
BTW 당신은에 그것을 줄일 수 있습니다
SELECT * FROM Product P WHERE @Status='standby' and P.Status IN (2,5,9,6) or @Status='deleted' and P.Status IN (4,5,8,10) or P.Status IN (1,3)
이후 또는 P.Status IN이 (1,3)도 @ 상태의 모든 기록을 제공합니다 = '출판'과 P.Status IN (1,3)
-
==============================
2.나는이 대답했습니다 실현,하지만 약간의 문제는 인정 솔루션이있다. 그것은 잘못된 반응을 반환합니다. 쉽게 고칠 수 :
나는이 대답했습니다 실현,하지만 약간의 문제는 인정 솔루션이있다. 그것은 잘못된 반응을 반환합니다. 쉽게 고칠 수 :
SELECT * FROM Products P WHERE (@Status='published' and P.Status IN (1,3)) or (@Status='standby' and P.Status IN (2,5,9,6)) or (@Status='deleted' and P.Status IN (4,5,8,10)) or (@Status not in ('published','standby','deleted') and P.Status IN (1,2))
괄호 (내가 그들을 포함 이유 때문에 읽을 아마도 쉽게 있지만) 필요하지 않습니다.
-
==============================
3.여기 내가 그것을 어떻게, 당신은 where 절에 case 문을 사용할 수 있다고 생각합니다 :
여기 내가 그것을 어떻게, 당신은 where 절에 case 문을 사용할 수 있다고 생각합니다 :
Select ProductID OrderNo, OrderType, OrderLineNo From Order_Detail Where ProductID in ( Select Case when (@Varibale1 != '') then (Select ProductID from Product P Where .......) Else (Select ProductID from Product) End as ProductID )
이 방법은 나를 다시 시간과 근무하고있다. 시도 해봐!
-
==============================
4.
select * from Tran_LibraryBooksTrans LBT left join Tran_LibraryIssuedBooks LIB ON case WHEN LBT.IssuedTo='SN' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 when LBT.IssuedTo='SM' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 WHEN LBT.IssuedTo='BO' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 ELSE 0 END`enter code here`select * from Tran_LibraryBooksTrans LBT left join Tran_LibraryIssuedBooks LIB ON case WHEN LBT.IssuedTo='SN' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 when LBT.IssuedTo='SM' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 WHEN LBT.IssuedTo='BO' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 ELSE 0 END
-
==============================
5.어쩌면 당신은이 방법을 시도 할 수 있습니다
어쩌면 당신은이 방법을 시도 할 수 있습니다
고르다 * 제품 P FROM WHERE (CASE 언제 @status = THEN '공개' (케이스 WHEN THEN P.Status IN (1, 3) '진실' 그밖에 그릇된 종료) WHEN @status = THEN '대기' (케이스 WHEN P.Status IN (2, 5, 9, 6) THEN '진실' 그밖에 '그릇된' 종료) 언제 @status가 = THEN '삭제' (케이스 WHEN P.Status IN (4, 5, 8, 10) THEN '진실' 그밖에 '그릇된' 종료) 그밖에 (케이스 WHEN THEN P.Status IN (1, 3) '진실' 그밖에 '그릇된' 종료) END) = 'TRUE'
@status가 = '출판'경우 이러한 방법으로, 쿼리 P.Status 1 또는 3 중 하나입니다 경우는 TRUE 다른 'FALSE'를 반환합니다 확인합니다. 이 말에 TRUE와 일치합니다
희망이 도움이.
-
==============================
6.
SELECT * FROM Tran_LibraryBooksTrans LBT LEFT JOIN Tran_LibraryIssuedBooks LIB ON CASE WHEN LBT.IssuedTo='SN' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 WHEN LBT.IssuedTo='SM' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 WHEN LBT.IssuedTo='BO' AND LBT.LIBRARYTRANSID=LIB.LIBRARYTRANSID THEN 1 ELSE 0 END
from https://stackoverflow.com/questions/19271853/sql-use-case-statement-in-where-in-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ISNULL NULL의 대 (0) | 2020.07.05 |
---|---|
[SQL] SSRS 표현에 '처럼'사용 (0) | 2020.07.05 |
[SQL] SQL Server의 분 계산 시간 차이 (0) | 2020.07.05 |
[SQL] 수있는 "IN"연산자를 사용 오라클에서 LIKE-와일드 카드 (%)? (0) | 2020.07.05 |
[SQL] 어떻게 SQL을 사용하여 문자열에서 특정 문자의 발생 횟수를 찾을 수 있습니까? (0) | 2020.07.05 |