database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6989 게시물 읽기
No. 6989
쿼리 질문드립니다.
작성자
boco11
작성일
2016-06-10 09:30ⓒ
2016-06-10 09:37ⓜ
조회수
3,979

경우에 따라서 where 조건을 달리하고 싶어서

where 문에 case를 쓰려고 하는데 아래 쿼리는 에러가 나는데

이럴때는 쿼리를 어떻게 작성해야 하나요?

 

@arg 값이 '1' 일때만 in 문장을 실행하고 싶습니다..

 

select *

from test001

where

(

case when @arg = '1' then

( code in ( 'A','B','C') )

end

);

 

이 글에 대한 댓글이 총 2건 있습니다.

동적 (Dynamic) 으로 쿼리를 작성하세요..

하기 쿼리 참고하세요

 

---쿼리시작---

Declare @arg char(1)
Set @arg = '1'
Declare @sql Varchar(Max)

Set @sql = ''
Set @sql = @sql + ' Select * '
Set @sql = @sql + '   From test001 '

IF @arg = '1'
  Begin
     Set @sql = @sql + ' Where code In ( ''A'',''B'',''C'') '
  End
 
Exec (@sql)

---쿼리끝---

       

최한영(terry0515)님이 2016-06-10 14:53에 작성한 댓글입니다.

고등학교때 집합 다음에 다 배웠던 명제를 전산과에서 이산수학을 통해서 또 배우는 이유가 질문하신 경우와 같이 실전에서 만나는 경우가 너무나 많으므로 이럴때 써먹으라는 거죠.

 
명제 P를 @arg='1'
명제 Q를 code IN ( 'A', 'B', 'C' )
라고 했을때 같단히 원하는 진리표를 그려본다면
 
P | Q | 결과로 나올지 여부
T | T | T
T | F | F
F | T | T
F | F | T
즉 PQ + P'Q + P'Q' 이죠
이를 더 줄이면
PQ + P'Q + P'Q'
= PQ + P'Q + P'Q + P'Q'
= (P + P')Q + P'(Q + Q')
= P' + Q
 
즉, WHERE 절은 
@arg != '1' OR code IN ( 'A', 'B', 'C' )
면 원하는 값들을 가져올 수 있습니다.
 
우욱님이 2016-06-13 21:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6992SQL 2008 R2 스탠다드 라이센스 관련 [1]
윤병호
2016-07-04
3903
6991CTE 정렬 좀 봐주세요..ㅠㅠ [3]
테르
2016-06-24
4045
6990float 형식의 소수점값에 between을 사용하여 결과값을 가져오고 싶습니다. [1]
둥둥이
2016-06-16
4599
6989쿼리 질문드립니다. [2]
boco11
2016-06-10
3979
6986MS-SQL 컨버전
강형우
2016-06-01
3987
6984특정문자열 이전까지의 데이타 가져오기 [2]
둥둥이
2016-05-31
4214
6982함수 사용 질문입니다. [2]
남현진
2016-05-30
4141
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다