Monday, May 3, 2010

SQL Server - Generation of Running Total


-- SQL Server running total quick syntax
SELECT SalesOrderID,
OrderDate = CONVERT(date, OrderDate),
O.TotalDue,
(SELECT sum(TotalDue)
FROM AdventureWorks2008.Sales.SalesOrderHeader
WHERE SalesOrderID <= O.SalesOrderID) 'Running Total' FROM AdventureWorks2008.Sales.SalesOrderHeader O
GO
/* Partial results
SalesOrderID OrderDate TotalDue Running Total
43659 2001-07-01 27231.5495 27231.5495
43660 2001-07-01 1716.1794 28947.7289
43661 2001-07-01 43561.4424 72509.1713
43662 2001-07-01 38331.9613 110841.1326
43663 2001-07-01 556.2026 111397.3352
*/

-- SQL running totals - calculating running totals in sql - t sql running total
-- SQL row number over order by
USE AdventureWorks;
GO
DECLARE @Year INT, @Month INT
SET @Year = 2001
SET @Month = 7
SELECT SequenceNo = ROW_NUMBER()
OVER(ORDER BY OrderDate, SalesOrderID),
OrderDate = convert(CHAR(10),OrderDate,111),
SalesOrderId,
-- SQL dollar formatting - money / currency format
TotalDue = '$' + convert(VARCHAR,TotalDue,1),
[Running Total] = '$' + convert(VARCHAR,

(SELECT sum(TotalDue)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID <= soh.SalesOrderID AND year(OrderDate) = @Year
AND month(OrderDate) = @Month), 1)
FROM Sales.SalesOrderHeader soh
WHERE year(OrderDate) = @Year
AND month(OrderDate) = @Month
ORDER BY SequenceNo;
GO
/* Partial results

SequenceNo OrderDate SalesOrderId TotalDue Running Total
1 2001/07/01 43659 $27,231.55 $27,231.55
2 2001/07/01 43660 $1,716.18 $28,947.73
3 2001/07/01 43661 $43,561.44 $72,509.17
4 2001/07/01 43662 $38,331.96 $110,841.13
5 2001/07/01 43663 $556.20 $111,397.34
6 2001/07/01 43664 $32,390.20 $143,787.54
7 2001/07/01 43665 $19,005.21 $162,792.75
*/
------------

-- SQL running total
-- SQL Server running total column
-- SQL correlated subquery

USE Northwind;
GO
SELECT o1.OrderID,
o1.ShipName,
o1.ShipCity,
OrderDate = convert(CHAR(10),OrderDate,112),
o1.Freight,
[FreightRunningTotal] =
(SELECT '$' + convert(VARCHAR,sum(o2.Freight),1)
FROM Orders o2
WHERE o2.OrderID <= o1.OrderID AND o2.ShipCountry = 'USA')

FROM Orders o1
WHERE o1.ShipCountry = 'USA'
ORDER BY o1.OrderID
GO

/* Partial results:
OrderID ShipName ShipCity OrderDate Freight FreightRunningTotal
10432 Split Rail Beer & Ale Lander 19970131 4.34 $1,989.40
10440 Save-a-lot Markets Boise 19970210 86.53 $2,075.93
10441 Old World Delicatessen Anchorage 19970210 73.02 $2,148.95
10452 Save-a-lot Markets Boise 19970220 140.26 $2,289.21
10469 White Clover Markets Seattle 19970310 60.18 $2,349.39
*/

------------

No comments:

Post a Comment