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 7181 게시물 읽기
No. 7181
SQL 조건 간소화
작성자
ohyouknow(ohyouknow)
작성일
2019-08-28 17:49
조회수
613

안녕하세요.

자주 질문 드려 죄송 합니다.

다음과 같은 SQL문에서 --①에서 --②까지 조건이 계속 반복 될 때, 달리 처리 하는 방법을 찾고 있습니다.

모든 조건을 써주지 않고 단순 select조건으로 말입니다.

조언 부탁, 감사드립니다.

------------------------------------------------------------------------------------------------------

select  UHDENO  , UHKIGC  , UHOK15
from
  (select ROW_NUMBER() OVER (PARTITION BY UHDENO, UHKIGC order by JOKEY desc) as rk , *
    from  com_tran.as_TUH1000J
 where  ISREMOVED = '0'
and ( (UHDENO = 286562 and UHKIGC = '10019') or (UHDENO = 286565 and UHKIGC = '10019') or (UHDENO = 286564 and UHKIGC = '10019') or (UHDENO = 435127 and UHKIGC = '10042') --①
     or (UHDENO = 435128 and UHKIGC = '10042') or (UHDENO = 164077 and UHKIGC = '10043') or (UHDENO = 886308 and UHKIGC = '10045') or (UHDENO = 886219 and UHKIGC = '10045')
  .....................................
  ..................................... 
     or (UHDENO = 886263 and UHKIGC = '10045') or (UHDENO = 886304 and UHKIGC = '10045') or (UHDENO = 886306 and UHKIGC = '10045') or (UHDENO = 886306 and UHKIGC = '10045') )--②
  ) a
where a.rk = 1
    and (JOENTT is null or JOENTT <> 'DL')
order by  UHDENO, UHKIGC

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

조회 조건에 특별한 규칙이 없는 것 같아 단순화가 안되겠네요.

오라클인 경우 (UHDENO, UHKIGC) IN ((286562, '10019') ,(286565, '10019') ... ) 이런식으로 나열해 조회가 되는데

MS-SQL에서는 해당 구문이 없습니다.

쿼리를 읽기 쉽게 하는 방법 하나로 테이블변수를 사용하는 방법이 있겠네요.

조회조건을 테이블변수에 모두 INSERT 시킨후 조인해서 결과를 가져오면 되는데

예는 아래와 같습니다.

 

DECLARE @findData TABLE(
	c1 INT,
	c2 VARCHAR(5)
);
INSERT INTO @findData (UHDENO, UHKIGC) VALUES 
	(286562, '10019')
	,(286565, '10019')
	,(286564, '10019')
	,(435127, '10042')
	,(435128, '10042')
	,(164077, '10043')
	,(886219, '10045')
	,(886263, '10045')
	,(886304, '10045')
	,(886306, '10045')
	;
select  UHDENO  , UHKIGC  , UHOK15 
 from
   (select ROW_NUMBER() OVER (PARTITION BY UHDENO, UHKIGC order by JOKEY desc) as rk , * 
    from @findData f 
    join com_tran.as_TUH1000J t on t.UHDENO.f.c1 AND t.UHKIGC=f.c2
    where  ISREMOVED = '0' 
 ) a 
 where a.rk = 1 
     and (JOENTT is null or JOENTT <> 'DL') 
 order by  UHDENO, UHKIGC 
박인호(paerae)님이 2019-08-29 10:11에 작성한 댓글입니다.
이 댓글은 2019-08-29 10:13에 마지막으로 수정되었습니다.

박인호님

댓글 감사드립니다.

아주 커다란 도움이 되었습니다.

댓글 안에 문장 하나하나가 마치 자기의 문제처럼 씌여진 느낌을 받았습니다.

진심으로 감사드립닏ㅏ.

 

 

ohyouknow(ohyouknow)님이 2019-08-29 11:41에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7185TRY_CONVERT 사용시 오류
db
2019-09-16
491
7184mssql 판매 관련해서
박재헌
2019-09-06
530
7183[쿼리문의] 1초단위 데이터를 5초간격 조회. [2]
영일
2019-09-02
625
7181SQL 조건 간소화 [2]
ohyouknow
2019-08-28
613
7180데이터 변경이력 조회 쿼리 문의 [3]
k62511
2019-08-27
655
7179SQL 갼소화 [2]
ohyouknow
2019-08-27
568
7178JDBC에서 executeBatch()를 사용해서 데이터를 INSERT할 경우
권기혁
2019-08-19
491
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.073초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다