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 2076 게시물 읽기
No. 2076
선택된 시간 내의 데이터가 없어도 결과를 보여주는 방법...?
작성자
김상윤
작성일
2005-07-05 11:31ⓒ
2005-07-05 11:34ⓜ
조회수
3,709

안녕하세요?

 

열심히 노력해봤는데.. 힘들군요.

 

사용자가 선택한 fromTime에서 toTime까지의 데이터를 가져오려 하는데.. 생각처럼

안되고 있습니다.

MS-SQL 2000 사용 중입니다.

 

아래는 현재의 쿼리 부분과 그 결과입니다.

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

SELECT CONVERT(CHAR(14), EventTime, 120) + '00' + '~' + CONVERT(CHAR(14),

DATEADD(hour, 1, EventTime), 120) + '00' AS TIME, A, B, C,

COUNT(*) AS [Number of Occurrence]

FROM AlarmLog

WHERE (A = '3A') AND (EventTime BETWEEN '2005/05/01 00:00' AND '2005/05/05 05:00')

GROUP BY CONVERT(CHAR(14), EventTime, 120) + '00' + '~' + CONVERT(CHAR(14),

DATEADD(hour, 1, EventTime), 120) + '00', A, B, C

ORDER BY TIME

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

현재 결과:

Time A B C Number of Occurrence

2005/05/01 00:00 ~ 2005/05/01 01:00 3A X X 1

2005/05/01 01:00 ~ 2005/05/01 02:00 3A X X 12

2005/05/01 02:00 ~ 2005/05/01 03:00 3A X X 3

2005/05/01 04:00 ~ 2005/05/01 05:00 3A X X 4

...

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

-> 이벤트가 일어난 시각의 데이터만 있습니다. EventTime라는 컬럼은 DateTime형식입니다.

 

 

제가 원하는 결과는.. 만약 특정 시간 동안의 data가 없더라도 보여줘야 한다는 것입니다.

아래처럼 말이죠...

 

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

원하는 결과:

Time A B C Number of Occurrence

2005/05/01 00:00 ~ 2005/05/01 01:00 3A X X 1

2005/05/01 01:00 ~ 2005/05/01 02:00 3A X X 12

2005/05/01 02:00 ~ 2005/05/01 03:00 3A X X 3

2005/05/01 03:00 ~ 2005/05/01 04:00 3A X X 0

2005/05/01 04:00 ~ 2005/05/01 05:00 3A X X 4

...

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

 

테이블을 따로 만들지 않고 원하는 결과를 얻을 수 있을까요?

해결 방법을 아시는 분이 계시면 가르쳐주시면 정말 고맙겠습니다.

 

부탁드립니다.

안녕히계세요.

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

제가 보기엔 조인을 하여야 할 듯하구요.

시작일과 마지막 날짜를 이용 해당 구간의 날짜와 시간을

만들어 내는 dumyTable이 필요할 듯합니다.

 

만약 그렇지 않다면

indenity한 칼럼을 하나 만드는데요.

지금 시작시간부터 시작해서 빠진 곳이 있다면

칼럼 하나를 삽입하여 union하여야 할듯한데.

이것은 위의 과정보다 오히려 더 어렵고 짜증나는 작업이 될 듯합니다.

 

프로그램을 하지 않으면 결과가 나올수 없다는 것을

gigo(Gabage in Gabage Out)이라고 합니다.

테이블하나를 생성하시고 outer join을 걸어버리십시요.

 

 

여리님이 2005-07-05 14:00에 작성한 댓글입니다. Edit

group by all 기능을 함 사용해 보심이 어떠실런지...원하시는 답을 구하실 수 있으실거 같은데요...

자세한 내용은 bol을 참조하시구요...

 

 

eureka님이 2005-07-05 17:47에 작성한 댓글입니다. Edit

테이블 내 관련 자료가 없다면, 배치 작업으로 빈 시간 때에 하나의

row를 넣어, group by를 이용하여 결과를 얻을 수 있지만

조금 어거지 같네요.

여리님의 생각과 같이 더미 테이블을 생성하시는 것이 가장 좋은 방법 같습니다.

만약 권한 문제나 회사 내 작업 규칙 때문이라면 로컬 임시 테이블이나

테이블 변수를 이용하는 것도 방법이라고 사료됩니다. 

그리고 테이블 구성은 시작 시간이 유일하다는 것에 착안을 하면

쉽게 구성될수 있을 것 같습니다..

 

참고할 도서로는

손호석 님의 Deep Inside T-SQL 쿼리 테크닉 (출판사:영진닷컴)에서

선분처리 부분을 참고하시면 될 것 같습니다.

가을남자님이 2005-07-05 22:35에 작성한 댓글입니다.
이 댓글은 2005-07-05 22:39에 마지막으로 수정되었습니다. Edit

저두 더미 테이블 한표 ~

deep inside t-sql 이책도 한표 ~

책 정말 좋아요 ^^;

 

석이님이 2005-07-06 06:10에 작성한 댓글입니다. Edit

정말 고맙습니다~ ^^

많은 도움이 됐습니다.

답변해주신 모든 분들 건강하시길 빕니다.

 

안녕히계세요~

김상윤님이 2005-07-06 14:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2079DateTime형이 load data infile ~ replace 시에 ZERO value로 기록이되서.. [1]
이진
2005-07-06
2667
2078빠른 like 검색 문의 [2]
김민재
2005-07-05
8639
2077oracle sysdate ==> mssql getdate() [2]
최송
2005-07-05
8103
2076선택된 시간 내의 데이터가 없어도 결과를 보여주는 방법...? [5]
김상윤
2005-07-05
3709
2075[초보]mssql 에 있는 데이터를 mysql 로 옮기고 싶은데요.. [1]
우상철
2005-07-04
2734
2074MSSQL 서버 3대를 2:1 로 자료를 일정 시간에 옮겨 오려고 합니다. [3]
보리
2005-07-04
3522
2073프로필러에서 잠금관련 질문입니다...
초보
2005-07-04
2671
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다