Microsoft SQL Server 2005 Best Practices

How to rank sales?

 

Execute the following script in Query Editor to a ranking report by orderID and reason description:

USE AdventureWorks;

WITH wteSOD
AS
(SELECT SalesOrderID, ProductName=Name,

RANK() OVER (PARTITION BY SalesOrderID

ORDER BY p.ProductID) AS Rank

FROM Sales.SalesOrderDetail sod JOIN Production.Product p
ON sod.ProductID = p.ProductID),
wteSR
AS
(SELECT sohsr.SalesOrderID, sr.[Name],

RANK() OVER (PARTITION BY SalesOrderID

ORDER BY sr.[Name]) AS Rank

FROM Sales.SalesOrderHeaderSalesReason as sohsr

INNER JOIN Sales.SalesReason AS sr

ON sr.SalesReasonID = sohsr.SalesReasonID)


SELECT SeqID=ROW_NUMBER() OVER ( ORDER BY soh.SalesOrderNumber),
soh.SalesOrderNumber, ProductName, wteSR.[Name] AS Reason

FROM wteSOD

FULL JOIN wteSR

ON wteSR.SalesOrderID = wteSOD.SalesOrderID

AND wteSR.Rank = wteSOD.Rank

INNER JOIN Sales.SalesOrderHeader AS soh

ON soh.SalesOrderID = COALESCE (wteSOD.SalesOrderID, wteSR.SalesOrderID)
WHERE soh.TotalDue > 200000.0

ORDER BY soh.SalesOrderID, COALESCE(wteSR.Rank, wteSOD.Rank);




 

The Best SQL Server 2005 Training in the World
 
 
SQLUSA.com Home Page