데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
DECLARE @CURR DATETIME
SET @CURR = '2016-03-01'
SELECT *
, (SELECT CUSTABB FROM ZCIM10P WITH(NOLOCK) WHERE CUSTNO = A.CUSTNO) CUSTABB
, (SELECT HGNAME FROM PPIM10P WITH(NOLOCK) WHERE EMPNO = A.EMPNO) EMPNM
FROM (
SELECT '1' GUBUN, A.QFACOD, A.EMPNO, A.CUSTNO
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 - 5, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 1, @CURR), 120) THEN AMT ELSE 0 END) AMT_PW -- 전주금액
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 - 5, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 1, @CURR), 120) THEN QTY ELSE 0 END) QTY_PW -- 전주수량
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 2, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 8, @CURR), 120) THEN AMT ELSE 0 END) AMT_CW -- 금주금액
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 2, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 8, @CURR), 120) THEN QTY ELSE 0 END) QTY_CW -- 금주수량
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23) THEN AMT ELSE 0 END) AMT_CM -- 당월금액
, SUM(CASE WHEN A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23) THEN QTY ELSE 0 END) QTY_CM -- 당월수량
FROM SORD5MV A WITH(NOLOCK)
WHERE A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23)
AND SUBSTRING(A.SLIPNO, 1, 1) <> 'S'
GROUP BY A.QFACOD, A.EMPNO, A.CUSTNO
UNION ALL
SELECT '2' GUBUN, A.QFACOD, A.EMPNO, A.CUSTNO
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 - 5, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 1, @CURR), 120) THEN AMT ELSE 0 END) AMT_PW
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 - 5, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 1, @CURR), 120) THEN QTY ELSE 0 END) QTY_PW
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 2, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 8, @CURR), 120) THEN AMT ELSE 0 END) AMT_CW
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 2, @CURR), 120)
AND CONVERT(CHAR(10), DATEADD(D, DATEPART(DW,@CURR) * -1 + 8, @CURR), 120) THEN QTY ELSE 0 END) QTY_CW
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23) THEN AMT ELSE 0 END) AMT_CM
, SUM(CASE WHEN A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23) THEN QTY ELSE 0 END) QTY_CM
FROM SBOT5MV A WITH(NOLOCK)
WHERE A.OUTDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)
AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23)
GROUP BY A.QFACOD, A.EMPNO, A.CUSTNO
) A
[결과값]
결과값은 첨부파일에 있습니다..
일자에 10일이나 20일이나 30일을 넣으면 전주에 대한 데이터가 나오는데
1일이나 2일 같은 앞쪽 일자를 넣으면 데이터가 안나옵니다
1일에서 전주면 지난달 마지막주?가 되게 하고싶은데 어떻게 수정해야할지 모르겠네요..ㅠ
Comment 2
-
처리짱
2016.10.04 14:49
-
MSSQL초보입문자
2016.10.04 15:09
해결했습니다 ㅎㅎ
WHERE A.ORDDATE BETWEEN CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(D,1, @CURR)),23)AND CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23)여기서 between 월초 and 월말 로 되어 있었네요~between 지난주월요일 and 월말 로 바꾸니 잘 되네요 ㅎ
CONVERT(CHAR(10), DATEADD(D, -DAY(@CURR), DATEADD(M,1, @CURR)),23) 이런 부분들이
select로 원하는 값이 맞는지 확인해 나가셔야 할거 같네요..