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 5710 게시물 읽기
No. 5710
날자를 몇일~몇일까지의 검색을 해야하는데 도와주세요~
작성자
정재원(haru0)
작성일
2010-07-26 09:25
조회수
6,973

안녕하세요 초초보 ms-sql작업을 하는 1인입니다..ㅠ.ㅠ


DECLARE @memname varchar(50),
  @tagno varchar(50),
  @orgname varchar(50),
  @wdate1 char(12),
  @wdate2 char(12)

 
SET @orgname = ''   --학교이름( 
SET @tagno = ''  --학생태그번호
SET @memname = '김효진'--학생이름

SET @wdate1 = '20100721'  --시작시간
SET @wdate2 = '20100722'  --끝나는시간  


SELECT C.ORGNAME,A.MEMBERID,A.MEMNAME,B.TAGNO,A.USERID,D.NAME,A.DESCRIPT,A.WDATE
 FROM dbo.TB_CONSULT_HIST A
 JOIN ANYCARE.dbo.TB_MEMBER B
  ON A.MEMBERID = B.MEMBERID
 JOIN ANYCARE.dbo.TB_ORGAN C
  ON LEFT(A.MEMBERID,5) + '000' = C.ORGMEM
 JOIN ANYCARE.dbo.TB_BRANCH D
  ON A.USERID = D.BRMEM
 WHERE A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname
      AND CONVERT(CHAR(8),A.WDATE,112) between @wdate1 AND @wdate2 
 ORDER BY CONVERT(CHAR(8),A.WDATE,112) DESC
 

 

제가 할려고 하는요건은

SET @orgname = ' '   --학교이름( 
SET @tagno = ' ' --학생태그번호
SET @memname = '이하늘'   --학생이름 

 

 

 

이부분을 하나만 충족을 해도 되야하는데

WHERE A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname <--이부분에 가로를 치지 않으면 쿼리는 나오는데 다만 날짜부분이

20100721~22일것만 나와야하는데 이에 해당하는 학생의 작년 날짜도 나오게되서 ㅠㅠ

다시 (WHERE A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname) 가로를 치게되면 쿼리는 나오지않고;

죽겠습니다 고수님들 도와주세요 ㅠㅠ

 

 

 

ORGNAME       MEMBERID       MEMNAME             TAGNO       USERID         NAME                DESCRIPT                                             WDATE

북삼초등학교     E0272Q0022      김효진           L01538678     H01010         이미경      재전-타인문자전송된다함/일시수정        2010-07-09 13:26:30.083
북삼초등학교 E0272Q0022 김효진 L01538678 H01010  이미경 지사요청/ 충전안됨/수거차 배송차 2번방문 안내 2010-07-09 13:45:05.130
북삼초등학교 E0272Q0022 김효진 L01538678 H01010  이미경 모-수신폰변경 2010-07-09 13:32:16.200
북삼초등학교 E0272Q0022 김효진 L01538678 H01010  이미경 지사요청 재발급/부재 2010-07-08 18:34:29.037
북삼초등학교 E0272Q0022 김효진 L01538678 H01040  박경숙 불가-뉴월드학원-필요치않음(원장) 2010-05-24 15:17:41.413
북삼초등학교 E0272Q0022 김효진 L01538678 H01040  박경숙 불가-새마을문고-이용학생2명미만으로설불 2010-05-24 16:27:43.467

 

날자를 보시면 전부다 쿼리가 검색이되네요;;ㅠㅠ

 

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

안녕하세요 저도 초보인지라..

OR하고 AND는 같이 쓰면안될것니다

그래서 OR끼리는 ()를 해주셔야 하는데..

 (WHERE A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname)

-->

WHERE (A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname)

요렇게 하면될것 같은데요.. 쿼리가 문제가 아니라 가로 위치를 잘못 넣으신거 아닌가요??

착한넘(agoodman99)님이 2010-07-27 09:27에 작성한 댓글입니다.

WHERE (A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname)

이렇게 해보았습니다..ㅠ.ㅠ

다만 쿼리의 출력이 안되서 문제지

가로를 다빼고상태는 전체로 나오는데 착한넘님께서 가르켜주셧던 가로로하면 쿼리의 값이 출력이 안나오네요 ㅠㅠ

정재원(haru0)님이 2010-07-27 15:22에 작성한 댓글입니다.

WHERE절 부분에
 WHERE  (A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname)
      AND CONVERT(CHAR(8),A.WDATE,112) between @wdate1 AND @wdate2
 ORDER BY CONVERT(CHAR(8),A.WDATE,112) DESC
 

이렇게 되어 있다면 쿼리는 이상이 없는거 같네요

단지 날짜를 20100721 ~ 22일로 하셨는데 이 날짜에 데이터가 있는지 확인해 보세요??

날짜범위를 2010 0701 ~ 31일정도로 넓혀서 해보세요.

 

agoodman99님이 2010-07-27 17:06에 작성한 댓글입니다. Edit

agoodman99 

 

DECLARE @memname varchar(50),
  @tagno varchar(50),
  @orgname varchar(50),
  @wdate1 char(12),
  @wdate2 char(12)

 
SET @orgname = ' '   --학교이름( 
SET @tagno = 'L01538678'  --학생태그번호
SET @memname = ' '   --학생이름

SET @wdate1 = '20100701'  --시작시간
SET @wdate2 = '20100731' --끝나는시간  


SELECT C.ORGNAME,A.MEMBERID,A.MEMNAME,B.TAGNO,A.USERID,D.NAME,A.DESCRIPT,A.WDATE
 FROM dbo.TB_CONSULT_HIST A
 JOIN ANYCARE.dbo.TB_MEMBER B
  ON A.MEMBERID = B.MEMBERID
 JOIN ANYCARE.dbo.TB_ORGAN C
  ON LEFT(A.MEMBERID,5) + '000' = C.ORGMEM
 JOIN ANYCARE.dbo.TB_BRANCH D
  ON A.USERID = D.BRMEM    
  WHERE  (A.MEMNAME = @memname or  B.TAGNO = @tagno or  LEFT(C.ORGNAME,2) = @orgname)
      AND CONVERT(CHAR(8),A.WDATE,112) between @wdate1 AND @wdate2
 ORDER BY CONVERT(CHAR(8),A.WDATE,112) DESC
 

데이터는 있습니다. 그런데 1일부터 31일까지 하게되면 데이터양이 많아서 인지 엄청 오래걸리네요

정재원(haru0)님이 2010-07-27 17:45에 작성한 댓글입니다.
이 댓글은 2010-07-27 17:49에 마지막으로 수정되었습니다.

OR 조건이 너무 많네요 쿼리가 상당히 느릴뜻하네요..

차라리 검색조건별로 검색을하시고 UNION으로 합치시는게

낳을뜻하네요.

이민규(purewhites)님이 2010-07-27 17:56에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
57132005에서 2008로 복제를 사용하려합니다. 문제없을까요?
지형준
2010-07-28
6797
5712윈도우 서버 2008 급질문 드립니다.. 봐주세요... [2]
와니
2010-07-26
6355
5711하나의 커넥션 정보로 다중의 database 연결하여 사용하는 법? [2]
이소현
2010-07-26
6562
5710날자를 몇일~몇일까지의 검색을 해야하는데 도와주세요~ [5]
정재원
2010-07-26
6973
5708db생성하는 방법 알려주세요 ㅠㅠ [1]
이석준
2010-07-24
6080
5707쿼리 하나 질문 올립니다. [2]
김영남
2010-07-24
6143
5706informix 7.3 에서 MSSQL2008로 데이타 가져오기 [1]
안수완
2010-07-23
6282
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다