롤링 36 개월 단위 판매 내역을 가져 오는 쿼리가 있습니다. 그것은 그대로 작동하지만, 시간이 오래 걸리고 번거로운 방법이 있는지 궁금해했습니다.SQL SELECT 문 단순화?
쿼리의 두 부분 즉, 머리글과 데이터가 있습니다. 여기
내가 헤더를 위해 무엇을 가지고 : - 일 2011 그것은으로 진행 ...
, DATEADD(m, -03, GETDATE()-day(GETDATE()-1)) AS "MM03"
, DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AS "MM02"
, DATEADD(m, -01, GETDATE()-day(GETDATE()-1)) AS "MM01"
6월부터 8월까지 오늘로
SELECT
DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AS "MM36"
, DATEADD(m, -35, GETDATE()-day(GETDATE()-1)) AS "MM35"
, DATEADD(m, -34, GETDATE()-day(GETDATE()-1)) AS "MM34"
이 구월이다 36 줄의 코드. 다음과 같이 단위 판매 데이터를 뽑아
명령문은 다음과 같습니다 - 일 2011 그것은으로 진행 ...
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -03, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -02, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty03"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -01, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty02"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -01, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -00, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty01"
오늘로
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -35, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty36"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -35, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -34, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty35"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -34, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -33, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty34"
이 구월이다 6 월 - 2014 년 8 월.
이 보고서를 작성하기 전에 추가 할 항목이 많으므로 가능한 한 깔끔하게 정리하고 싶습니다.
감사합니다,
편집
아래의 예는 내가해야했다, 그래서 위의 코드와 나는 이미지를 게시 할 수있는 담당자가없는 (원하는 것을 얻을 수 있어요 것을 보여줍니다 링크). 또한 피벗 테이블에서 아이템 번호와 롤링 월이 누락되었음을 보여줍니다. 이 두 가지를 어떻게 추가합니까?
는 내가 "ItemTable"을 삭제했습니다. 다음과 같이 "itemNum이는"필드,하지만 내 크리스탈 보고서에 표시되지 않습니다. 아무데도 내가 그것을 넣어려고, 나는 "바인딩 될 수 없다"오류가 발생합니다.select
[0] MM00
, [1] MM01
, [2] MM02
, ...
from (
select
"ItemTable"."ItemNum",DateDiff(m, "SalesTable"."SalesDate", GetDate()) months_ago
, "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" NetQty
from your_table
) as source
pivot
(
sum(NetQty) For months_ago in ([0], [1], [2], [3], ...)
) as PivotTable
다시 한번 감사드립니다.
1 개월 쿼리를 만들고 1에서 36까지 증가하는 WHILE 루프로 래핑하십시오. –