1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE @INDATE CHAR (8) SET @INDATE = LEFT ( CONVERT ( varchar , GetDate(),112),6) - 9 SELECT * FROM ( SELECT LEFT (A.INVOICEDATE, 6) AS INDATE, B.ITEMSEQ , SUM (B.QTY) AS QTY FROM SINVOICE A, SINVOICEITEM B WHERE A.INVOICESEQ = B.INVOICESEQ AND A.INVOICEDATE BETWEEN @INDATE AND GETDATE() GROUP BY LEFT (A.INVOICEDATE, 6), B.ITEMSEQ ) A PIVOT( SUM (QTY) FOR INDATE IN ([201802],[201803],[201804],[201805])) AS RESULTPIVOT; |
여기에서 PIVOT INDATE를 동적으로 조회조건 기준으로 나오게 하려면 어떻게 해야할까요? 현재는 2018년 1월부터 11월까지이나 현재 기준에서 10개월 이전 DATA를
끌고오게 할거라서요..
사용하신 9 를 빼는 방법은 잘못된 방법입니다.
현재월이 201811 이라 201802 가 나왔지만?
201901 월이라면? 201892 가 나올 것입니다.
10개월 고정이라면?
년월은 가변적으로 변하는 값이니, 고정값인 개월수로 피벗하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT * FROM ( SELECT DATEDIFF(m, CONCAT( CONVERT ( VARCHAR (6), DATEADD(m, -9, GetDate()), 112), '01' ) , CONCAT( LEFT (a.invoicedate, 6) , '01' ) ) + 1 AS m , b.itemseq , b.qty FROM sinvoice a INNER JOIN sinvoiceitem b ON a.invoiceseq = b.invoiceseq WHERE a.invoicedate >= CONVERT ( VARCHAR (6), DATEADD(m, -9, GetDate()), 112) AND a.invoicedate <= CONVERT ( VARCHAR (8), GetDate() , 112) ) a PIVOT( SUM (qty) FOR m IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) a ; |