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 6910 게시물 읽기
No. 6910
조회쿼리 만들기.
작성자
초보입니다.(fightinggood)
작성일
2015-05-18 10:10ⓒ
2015-05-18 10:12ⓜ
조회수
7,734

안녕하세요..

조회쿼리가 잘 되지 않아서 이렇게 문의드릴려고 합니다.

제가 조회 할려고 하는 내용은 

재고테이블이 있습니다.

일자                    재품코드           수량

20150102           000001              2

20150103           000001               1

이렇게 일자별로 해당제품의 재고를 넣어놨습니다. 물론 저 재고 수량은 매일 변경됩니다.

그리고 다른테이블은 가격테이블 입니다.

일자                제품코드                 가격

20150301         000001              1000

가격테이블은 가격이 매번 변동되는게 아니라 수시로 아니면 가끔씩변경됩니다.

 

이제부터 제가 할조회내용은  재고테이블의 매달 마지막일자 그러니까. 1월은 31일, 2월은28일, 3월은 31일 이렇게

마지막일자의 모든 제품의 수량을 가져와서 가격테이블의 가격과 계산하여 재고자산을 알아오는 것입니다.

제품은 은 1만여개가 됩니다.

 

1월               2월            3월              4월 ...............             12월

1000           1000          10000         200000                       1000

이렇게 월별로 보여주고 싶습니다.

재고는 매일매일 생성되기 때문에 오늘 일자 이후의 재고데이터는 없습니다.

현재는 각월별로 한번씩조회를 하는데 이 쿼리가 너무 오래걸립니다.

한번에 조회할수 있는 방법이 없을까요. 

 

참고로 아직까지 2000 을 사용중입니다. ㅠㅠ

감사합니다.

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

-- 2000은 없... 테스트 못... 걍 아마도 이정도면 2000에서 돌겠지... 싶은 수준으로다가..  -_-;;

/* 기존 데이터 준비 */
CREATE TABLE stocks
(
dt DATETIME
, cd CHAR(6)
, stock INT
)
;
INSERT INTO stocks( dt, cd, stock )
SELECT '20150102', '000001', 2
UNION ALL SELECT '20150103', '000001', 1
;
 
CREATE TABLE price
(
dt DATETIME
, cd CHAR(6)
, price INT
)
;
INSERT INTO price( dt, cd, price )
SELECT '20150301', '000001', 1000
UNION ALL SELECT '20150105', '000001', 2000
;
 
/* 월별 일자 테이블 생성 - 크기도 작고 매번 계산할 필요도 없고 */
CREATE TABLE firstDayOfMon
(
dt DATETIME
)
;
 
CREATE TABLE #nums
(
num INT IDENTITY(1, 1)
)
;
GO
 
INSERT INTO #nums DEFAULT VALUES;
GO 120
 
 
INSERT INTO firstDayOfMon( dt )
SELECT DATEADD(MONTH, num-1, '2014-01-01' )
FROM #nums
;
DROP TABLE #nums
;
 
 
-- 현재 데이터 상황
SELECT * FROM stocks;
SELECT * FROM price;
 
-- 구하기
SELECT sty, stm, stock * price
FROM
(
-- 재고 테이블에서 상품별 마지막날의 재고
SELECT gst.*, stock
FROM
(
-- 재고 테이블에서 상품별 재고 조사의 마지막날
SELECT cd, DATEPART( YEAR, dt ) AS sty, DATEPART( MONTH, dt ) AS stm, MAX( DATEPART( DAY, dt ) ) AS std
FROM stocks
GROUP BY cd, DATEPART( YEAR, dt ), DATEPART( MONTH, dt )
) AS gst
INNER JOIN stocks
ON gst.cd = stocks.cd
AND gst.sty = DATEPART( YEAR, stocks.dt )
AND gst.stm = DATEPART( MONTH, stocks.dt )
AND gst.std = DATEPART( DAY, stocks.dt )
) AS monthStock
INNER JOIN
(
SELECT gpr.*, price
FROM
(
SELECT cd, DATEPART( YEAR, dt ) AS pry, DATEPART( MONTH, dt ) AS prm, MAX( DATEPART( DAY, dt ) ) AS prd
FROM price
GROUP BY cd, DATEPART( YEAR, dt ), DATEPART( MONTH, dt )
) AS gpr
INNER JOIN price
ON gpr.cd = price.cd 
AND gpr.pry = DATEPART( YEAR, price.dt )
AND gpr.prm = DATEPART( MONTH, price.dt )
AND gpr.prd = DATEPART( DAY, price.dt )
) AS monthPrice
ON monthStock.cd = monthPrice.cd
AND monthStock.sty = monthPrice.pry
AND monthStock.stm = monthPrice.prm
;
 
-- 행을 열로 고치는 방법은 아마 이미 알고 계시거나
-- 정도 참조하시면 된다능..
 
 
-- 나중에도 써먹기 위해서 안 지워도 됨..
DROP TABLE firstDayOfMon
;
 
DROP TABLE price
;
DROP TABLE stocks
;
 
우욱님이 2015-05-18 11:41에 작성한 댓글입니다.
이 댓글은 2015-05-18 11:41에 마지막으로 수정되었습니다. Edit

 우욱님 감사합니다.

늘도움만 받는것 같습니다.

만들어주신 쿼리 테스트 중인데요.

 

문자열을 날짜 및/또는 시간으로 변환하지 못했습니다.

라는 에러메세지가 나오네요..

SELECT gst.*, stock
FROM
(
-- 재고 테이블에서 상품별 재고 조사의 마지막날
SELECT cd, DATEPART( YEAR, dt ) AS sty, DATEPART( MONTH, dt ) AS stm, MAX( DATEPART( DAY, dt ) ) AS std
FROM stocks
GROUP BY cd, DATEPART( YEAR, dt ), DATEPART( MONTH, dt )
) AS gst
INNER JOIN stocks
ON gst.cd = stocks.cd
AND gst.sty = DATEPART( YEAR, stocks.dt )
AND gst.stm = DATEPART( MONTH, stocks.dt )
AND gst.std = DATEPART( DAY, stocks.dt )
요 부분에서요.
하단에 있는 가격컬럼은 DATETIME 이 맞는데 위에 재고컬럼 은 VARCHAR 로 되어있어서
그런것 같습니다. 형변환을 해줘도 마찬가지로 오류가나네요.ㅠㅠ
DATEPART(YEAR,CONVERT(DATETIME, 컬럼명)) 이렇게 변환했습니다.
 
우욱님 실례가 안된다면 멜 주소 알려주실수있으신가요.?
제가 한달짜리 조회 할려고 만든 쿼리가 있는데 이걸 12번 돌릴려고하니 시간이.ㅠㅠ
하나씩 할때는 3초면 되는데 여러개를 할려니 안되네요 
한달조회로 만든 쿼리를 1년으로 바꿔주실수있으신가요.?
늘 도움만 받습니다.
 
감사합니다.
초보입니다.(fightinggood)님이 2015-05-18 14:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6913SQL 초보자 입니다. [1]
혀니
2015-06-15
5922
6912조직도 하위 부서를 검색하는 쿼리 질문 (__) [3]
초보쿼리
2015-05-27
7322
6911안녕하세요 쿼리질문좀 드립니다. [1]
투루로맨스
2015-05-18
6408
6910조회쿼리 만들기. [2]
초보입니다.
2015-05-18
7734
6909업데이트 쿼리문 질문입니다. [4]
코우지
2015-05-12
5231
6908MS-SQL 날짜 관련 쿼리 질문 [2]
도와주세요
2015-05-11
6743
6907오라클에서 mssql로 쿼리 변환 [2]
yj
2015-05-06
7973
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다