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 3735 게시물 읽기
No. 3735
쿼리좀 질문좀 드리겠습니다.요~~~
작성자
박통통(mejoo)
작성일
2007-09-06 16:51
조회수
3,645

품목별별 최근 날짜별 3개씩 가져올수 있는 방법이 없을까요??
예를들면

 ITEM             Date               Quanty
A_1               200702                  4
A_1               200704                  50
A-1               200705                  100
A-1               200707                  700
A_1               200708                  50
B_1               200601                  20
B_1               200608                  45
B_1               200610                  200
B_1               200702                 1000
B_1               200704                 200
B_1               200706                   500
B-1               200708                 2000

이렇게 Data가 들어있을때

결과물은

품목                                최근 생산  수량  
-----------------------------------------------------------------
A_1          200705     100          200707    700        200708       50
B-1          200704     200          200706    500        200708       2000

위와같이 A_1 품목 최근 실적 내역 3개
             B-1 품목 최근 실적 내역 3개
를 품목별 행으로 표시할수잇도록요..

단순히 최근날짜별 3개면 top 3 이렇게 사용하면 되는데..
이건 품목별 3개씩이기때문에..
잘 못하겟네요..
부탁좀 드리겠습니다.




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

--CREATE TABLE TESTA
--(ITEM VARCHAR(5)
--, DT CHAR(8)
--, QTY INT)
--GO
--
--INSERT INTO TESTA
--SELECT ITEM= 'A_1', DT = '200702',  QTY =  4     UNION ALL
--SELECT ITEM= 'A_1', DT = '200704',  QTY =  50    UNION ALL
--SELECT ITEM= 'A_1', DT = '200705',  QTY =  100   UNION ALL
--SELECT ITEM= 'A_1', DT = '200707',  QTY =  700   UNION ALL
--SELECT ITEM= 'A_1', DT = '200708',  QTY =  50    UNION ALL
--SELECT ITEM= 'B_1', DT = '200601',  QTY =  20    UNION ALL
--SELECT ITEM= 'B_1', DT = '200608',  QTY =  45    UNION ALL
--SELECT ITEM= 'B_1', DT = '200610',  QTY =  200   UNION ALL
--SELECT ITEM= 'B_1', DT = '200702',  QTY = 1000   UNION ALL
--SELECT ITEM= 'B_1', DT = '200704',  QTY = 200    UNION ALL
--SELECT ITEM= 'B_1', DT = '200706',  QTY =   500  UNION ALL
--SELECT ITEM= 'B_1', DT = '200708',  QTY = 2000
--

--GO

 

SELECT
 ITEM
 , DT1  = MAX(CASE WHEN SEQ = 1 THEN DT  ELSE NULL END)
 , QTY1 = MAX(CASE WHEN SEQ = 1 THEN QTY ELSE NULL END)
 , DT2  = MAX(CASE WHEN SEQ = 2 THEN DT  ELSE NULL END)
 , QTY2 = MAX(CASE WHEN SEQ = 2 THEN QTY ELSE NULL END)
 , DT3  = MAX(CASE WHEN SEQ = 3 THEN DT  ELSE NULL END)
 , QTY3 = MAX(CASE WHEN SEQ = 3 THEN QTY ELSE NULL END)
FROM
 (
  SELECT
   ITEM
   , DT
   , QTY
   , SEQ = (SELECT COUNT(*) FROM TESTA WHERE ITEM = X.ITEM AND DT <= X.DT)
  FROM TESTA  X
 ) A
WHERE SEQ  <= 3
GROUP BY ITEM
ORDER BY 1

.님이 2007-09-07 10:29에 작성한 댓글입니다. Edit

우와~~ 님 정말로 감사드립니다..
님이야 말로 SQL의 본좌이십니다.~~~
축복받으세요~~~

박통통(mejoo)님이 2007-09-07 12:08에 작성한 댓글입니다.

님..죄송한데요.한가지만 더 추가적으로 물어볼께있어요..

실제로 DB에 저장되어있는 데이터 타입은

년도월일.까지입니다.

즉, DT가 '20070705' 이런식으로 들어가있습니다.

그리고 출력데이타는 위 보기처럼 월까지만 출력이 되어야 하고요...



그래서 전

SEQ = (SELECT COUNT(*) FROM TESTA WHERE ITEM = X.ITEM AND DT <= X.DT)


이부분을


SEQ = (SELECT COUNT(*) FROM TESTA WHERE ITEM = X.ITEM AND SUBSTRING(DT,1,6) <= X.SUBSTRING(DT,1,6))


이렇게 바꾸었더니 Sql오류가 나더군요..


어떻게 해결을 해야될까요?

해결책좀 부탁드리겠습니다.




박통통(mejoo)님이 2007-09-07 15:33에 작성한 댓글입니다.

SEQ = (SELECT COUNT(*) FROM TESTA WHERE ITEM = X.ITEM AND SUBSTRING(DT,1,6) <= X.SUBSTRING(DT,1,6))
=> 
SEQ = (SELECT COUNT(*) FROM TESTA WHERE ITEM = X.ITEM AND SUBSTRING(DT,1,6) <= SUBSTRING(x.DT,1,6))

.님이 2007-09-09 14:19에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3739정말 기초적인 질문 하나 드립니다 [1]
corea21
2007-09-10
2323
3738교착상태
김지은
2007-09-10
2653
3736db connecting 이 실행 중 끊어집니다. ㅠ;;
이덕희
2007-09-07
2196
3735쿼리좀 질문좀 드리겠습니다.요~~~ [4]
박통통
2007-09-06
3645
3734쿼리 분석기(2000)에서 T-SQL 디버거 사용할 때 트레이스 기능이 먹히질 않아요.
임정택
2007-09-05
2621
3733select 문에서 function 사용시 속도가 너무 느립니다. [1]
궁금이
2007-09-05
4454
3732MS-SQL 외부에서 접속이... [1]
윤종민
2007-09-04
2658
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다