Quiz #5 + Prj. #3
-- prj. 3 + quiz 5
-- ===============
use AdventureWorks
-- 1. months totals
SELECT TOP (100) PERCENT
c.CustomerID, MONTH(o.OrderDate) AS OrderMonth, SUM(s.LineTotal)
AS LineTotal
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderHeader AS o
ON c.CustomerID = o.CustomerID
INNER JOIN Sales.SalesOrderDetail s
ON o.SalesOrderID = s.SalesOrderID
GROUP BY MONTH(o.OrderDate), c.CustomerID
ORDER BY c.CustomerID, OrderMonth
-- 2. orders totals
SELECT TOP (100) PERCENT
c.CustomerID, MONTH(o.OrderDate) AS OrderMonth, COUNT(c.CustomerID)
AS OrderCountByMonth
FROM Sales.Customer c
INNER JOIN Sales.SalesOrderHeader o
ON c.CustomerID = o.CustomerID
GROUP BY MONTH(o.OrderDate), c.CustomerID
ORDER BY 1,2,3
-- a tmp table tt
Declare @tt TABLE (
OrderYear int,
OrderMonth int,
CustomerID int,
TotAmt money,
OrdersTot int
)
-- load tt
insert into @tt
Select a.OrderYear, a.OrderMonth, a.CustomerID, A.TotAmt, b.OrdersTot
from (
SELECT TOP (100) PERCENT YEAR(o.OrderDate)
AS OrderYear, MONTH(o.OrderDate) AS OrderMonth,
c.CustomerID, SUM(o.TotalDue) AS TotAmt
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderHeader AS o
ON c.CustomerID = o.CustomerID
GROUP BY MONTH(o.OrderDate), c.CustomerID, YEAR(o.OrderDate)
) a
LEFT OUTER JOIN (
SELECT TOP (100) PERCENT YEAR(o.OrderDate) AS OrderYear,
MONTH(o.OrderDate) AS OrderMonth,
count(*) as OrdersTot, c.CustomerID
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderHeader AS o
ON c.CustomerID = o.CustomerID
GROUP BY MONTH(o.OrderDate), c.CustomerID, YEAR(o.OrderDate)
) b
on a.customerID = b.customerID
-- element, attibute, counts
select OrderYear, CustomerID, [1] as Jan, [2] as Feb, [3] as Mar,
[4] as Apr, [5] as May, [6] as Jun,
[7] As Jul, [8] as Aug, [9] as Sep,
[10] as Oct, [11] as Nov, [12] as Dec
FROM
( Select CustomerID, OrderMonth, OrderYear, OrdersTot From @tt ) p
PIVOT
(
count( OrdersTot)
for OrderMonth in
( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] )
) as pvt
for xml path
-- sums
select OrderYear, CustomerID, [1] as Jan, [2] as Feb, [3] as Mar,
[4] as Apr, [5] as May, [6] as Jun,
[7] As Jul, [8] as Aug, [9] as Sep,
[10] as Oct, [11] as Nov, [12] as Dec
FROM
( Select CustomerID, OrderMonth, OrderYear,TotAmt From @tt ) p
PIVOT
(
sum( TotAmt)
for OrderMonth in
( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] )
) as pvt
for xml path