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 6424 게시물 읽기
No. 6424
조인 및 조건 주기요..
작성자
초보입니다.(fightinggood)
작성일
2012-09-28 15:27
조회수
7,842

 현재 사용하는건 mssql2000 인데요..

여기서 해당 일자의 데이터를 구할려고합니다..

쿼리문은

SELECT A.DLCO_CD, C.DLCO_NM , A.DPT_CD ,  

CASE CON.CONTRACT_CD  WHEN 'V' THEN CON.CONTRACT_MONEY  ELSE 0 END AS CONTRACT_MONEY,  

DATEADD(MONTH, DATEDIFF(MONTH, 0, A.SEL_DT ), 0 ) AS rmonth  ,

SUM(case when b.xwh_slf in ('20002', '20013') then -1 * (b.rl_sel_amt + b.rl_vat) else (b.rl_sel_amt + b.rl_vat) end) as saleSum  

FROM  TBL_SEL_SLIP AS A  

INNER JOIN TBL_SEL_DTLS AS B   

ON A.SEL_DT = B.SEL_DT   

AND A.SEL_NO = B.SEL_NO     

LEFT  JOIN TBL_DLCO_INFO AS C  

ON A.DLCO_CD = C.DLCO_CD

LEFT JOIN TBL_GDS_INFO AS GDS  

ON B.GDS_CD = GDS.GDS_CD  

LEFT OUTER JOIN TBL_MAK_INFO AS MAK  

ON GDS.MAK_CD = MAK.MAK_CD  

LEFT OUTER JOIN TBL_MAK_GDS_N1 AS MAKN1 

ON GDS.MAK_CD = MAKN1.MAK_CD  

AND GDS.GDS_CL_N1 = MAKN1.GDS_CL_N1    

INNER JOIN TBL_DLCO_CONTRACT AS CON  

ON A.DLCO_CD = CON.DLCO_CD

WHERE 1=1  

AND A.SEL_DT BETWEEN '20120701' AND '20120831'  

AND (A.DLCO_CD = '' OR '' = '')   

AND (A.DPT_CD  = '' OR '' = '')  

AND A.DEL_YN = 'N'  

AND C.AGENCY_KIND LIKE '%V%'   

AND CON.CONTRACT_CD = 'V'  

AND GDS.MAK_CD IN ('75','73')  

OR (GDS.MAK_CD = '3' AND GDS.GDS_CL_N1 = '185')  

OR (GDS.MAK_CD = '9' AND GDS.GDS_CL_N1 = '169')  

OR (GDS.MAK_CD = '6' AND GDS.GDS_CL_N1 = '4')  

OR (GDS.MAK_CD = '70' AND GDS.GDS_CL_N1 = '178')  

GROUP BY A.DLCO_CD, C.DLCO_NM, A.DPT_CD, CON.CONTRACT_MONEY, CON.CONTRACT_CD ,  

DATEADD(MONTH,DATEDIFF(MONTH,0,A.SEL_DT),0)

이렇게 사용중인데요.. 제가 조인을 잘못한건지 조건을 잘못 준건지..

A.SEL_DT BETWEEN '20120701' AND '20120831'   <=== 일자의 데이터만 가져오고 싶은데.. 전체 데이터가 나옵니다.

AND GDS.MAK_CD IN ('75','73')  

OR (GDS.MAK_CD = '3' AND GDS.GDS_CL_N1 = '185')  

OR (GDS.MAK_CD = '9' AND GDS.GDS_CL_N1 = '169')  

OR (GDS.MAK_CD = '6' AND GDS.GDS_CL_N1 = '4')  

이부분이 추가 되면요.. 이 부분을 빼면.. 원하는 데이터만 나오고요..

수정을 어떻게 해야 하나요.??

감사합니다..

 

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

적으셨던 where 절만 copy하면 아래와 같죠?

 WHERE 

1=1  
AND A.SEL_DT BETWEEN '20120701' AND '20120831'  
AND (A.DLCO_CD = '' OR '' = '')   
AND (A.DPT_CD  = '' OR '' = '')  
AND A.DEL_YN = 'N'  
AND C.AGENCY_KIND LIKE '%V%'   
AND CON.CONTRACT_CD = 'V'  
AND GDS.MAK_CD IN ('75','73')  
OR (GDS.MAK_CD = '3' AND GDS.GDS_CL_N1 = '185')  
OR (GDS.MAK_CD = '9' AND GDS.GDS_CL_N1 = '169')  
OR (GDS.MAK_CD = '6' AND GDS.GDS_CL_N1 = '4')  
OR (GDS.MAK_CD = '70' AND GDS.GDS_CL_N1 = '178')  
 
AND 연산자가 OR 연산자보다 우선순위가 높기 때문에 위의 where 절은 SQL 서버에게 다음과 동일합니다.
 
WHERE 
 ( 
1=1  
AND A.SEL_DT BETWEEN '20120701' AND '20120831'  
AND (A.DLCO_CD = '' OR '' = '')   
AND (A.DPT_CD  = '' OR '' = '')  
AND A.DEL_YN = 'N'  
AND C.AGENCY_KIND LIKE '%V%'   
AND CON.CONTRACT_CD = 'V'  
AND GDS.MAK_CD IN ('75','73')  
 ) 
OR (GDS.MAK_CD = '3' AND GDS.GDS_CL_N1 = '185')  
OR (GDS.MAK_CD = '9' AND GDS.GDS_CL_N1 = '169')  
OR (GDS.MAK_CD = '6' AND GDS.GDS_CL_N1 = '4')  
OR (GDS.MAK_CD = '70' AND GDS.GDS_CL_N1 = '178')  
 
변수 이름과 비교하는 값으로 추정해 보면 사실 원래 원하셨던 것은 OR들을 먼저 묶기를 원하셨던 것으로 보입니다.
따라서 OR 부분을 ()로 묶으면 다음과 같은 형태가 되겠죠.
 
WHERE 
1=1  
AND A.SEL_DT BETWEEN '20120701' AND '20120831'  
AND (A.DLCO_CD = '' OR '' = '')   
AND (A.DPT_CD  = '' OR '' = '')  
AND A.DEL_YN = 'N'  
AND C.AGENCY_KIND LIKE '%V%'   
AND CON.CONTRACT_CD = 'V'  
AND
GDS.MAK_CD IN ('75','73')  
OR (GDS.MAK_CD = '3' AND GDS.GDS_CL_N1 = '185')  
OR (GDS.MAK_CD = '9' AND GDS.GDS_CL_N1 = '169')  
OR (GDS.MAK_CD = '6' AND GDS.GDS_CL_N1 = '4')  
OR (GDS.MAK_CD = '70' AND GDS.GDS_CL_N1 = '178')  
  ) 
 
 
연산자 우선순위를 잘 알고 있다고 하더라도 보기 쉽게 하기 위해서 ()를 사용하시면 참~~ 좋습니다.
우욱님이 2012-09-28 15:43에 작성한 댓글입니다.
이 댓글은 2012-09-28 15:45에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6427쿼리 질문드리겠습니다. [1]
박종훈
2012-10-19
7917
6426$partition 사용법 질문입니다. [2]
김봉달
2012-10-16
7380
6425오른쪽 숫자 제거하기 [4]
정인수
2012-10-10
11733
6424조인 및 조건 주기요.. [1]
초보입니다.
2012-09-28
7842
6423인덱스에 궁금한점이 있습니다. [2]
곰보
2012-09-27
7458
6422ms sql 2000 특정 테이블 쿼리가 응답이 없습니다 [1]
김한식
2012-09-26
8025
6421기초적인 질문좀.... [1]
초보입니다.
2012-09-26
7327
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다