2010년 11월 30일 화요일

SQL Query - 전일과 금일 판매량의 합을 구하는 쿼리

SQL Query 중에 집합쿼리를 사용해서 해결하지 못하고

Cursor를 이용해서 구할수 밖에 없는 문제중 하나 ..

전체 영업 데이터중에서 하루 전판매량과 당일 판매량의 합을 구하는 Query 이다..



SqlServerMVP 53( SqlServerDeepDives) 책의 예제 chat4.4



USE AdventureWorks;
SET NOCOUNT ON;

DECLARE @Results TABLE
       (CustomerID int NOT NULL,
        OrderDate datetime NOT NULL,
        SalesOrderID int NOT NULL,
        TotalDue money NOT NULL,
        RunningTotal money NULL,
        Rnk int NOT NULL,
        PRIMARY KEY (Rnk, CustomerID));

INSERT INTO @Results(CustomerID, OrderDate, SalesOrderID, TotalDue,
                     RunningTotal, Rnk)
SELECT CustomerID, OrderDate, SalesOrderID, TotalDue, TotalDue,
       RANK() OVER (PARTITION BY CustomerID
                    ORDER BY     OrderDate,
                                 SalesOrderID)
FROM   Sales.SalesOrderHeader;

DECLARE @Rank int,
        @RowCount int;
SET     @Rank = 1;
SET     @RowCount = 1;

WHILE @RowCount > 0
BEGIN;
  SET @Rank = @Rank + 1;

  UPDATE     nxt
  SET        RunningTotal    = prv.RunningTotal + nxt.TotalDue
  FROM       @Results       AS nxt
  INNER JOIN @Results       AS prv
        ON   prv.CustomerID  = nxt.CustomerID
        AND  prv.Rnk         = @Rank- 1
  WHERE      nxt.Rnk         = @Rank;

  SET @RowCount = @@ROWCOUNT;
END;

SELECT   CustomerID, OrderDate, SalesOrderID, TotalDue, RunningTotal
FROM     @Results
ORDER BY CustomerID, OrderDate, SalesOrderID;

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.