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로 원하는 값이 맞는지 확인해 나가셔야 할거 같네요..