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;
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.