USE AdventureWorks;
GO
;WITH cteVendorPO
AS (SELECT PurchaseOrderID,
Country = cr.Name,
State = StateProvinceCode,
Employee = FirstName + ' ' + LastName,
Vendor = v.Name
FROM Purchasing.PurchaseOrderHeader poh
JOIN HumanResources.Employee e
ON poh.EmployeeID = e.EmployeeID
JOIN Person.Contact c
ON e.ContactID = c.ContactID
JOIN Purchasing.Vendor v
ON v.VendorID = poh.VendorID
JOIN Purchasing.VendorAddress va
ON v.VendorID = va.VendorID
JOIN Person.Address a
ON a.AddressID = va.AddressID
JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
JOIN Person.CountryRegion cr
ON cr.CountryRegionCode = sp.CountryRegionCode),
cteVendorTotalDue
AS (SELECT Employee = FirstName + ' ' + LastName,
Country = cr.Name,
State = StateProvinceCode,
Vendor = v.Name,
TotalDue
FROM Purchasing.PurchaseOrderHeader poh
JOIN HumanResources.Employee e
ON poh.EmployeeID = e.EmployeeID
JOIN Person.Contact c
ON e.ContactID = c.ContactID
JOIN Purchasing.Vendor v
ON v.VendorID = poh.VendorID
JOIN Purchasing.VendorAddress va
ON v.VendorID = va.VendorID
JOIN Person.Address a
ON a.AddressID = va.AddressID
JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
JOIN Person.CountryRegion cr
ON cr.CountryRegionCode = sp.CountryRegionCode)
SELECT pvt1.Country,
pvt1.State,
pvt1.Vendor,
[Erin Hagens POs] = pvt1.[Erin Hagens],
[Erin Hagens Amount] = '$' + convert(VARCHAR,pvt2.[Erin Hagens],1),
[Linda Meisner POs] = pvt1.[Linda Meisner],
[Linda Meisner Amount] = '$' + convert(VARCHAR,pvt2.[Linda Meisner],1),
[Sheela Word POs] = pvt1.[Sheela Word],
[Sheela Word Amount] = '$' + convert(VARCHAR,pvt2.[Sheela Word],1),
[Frank Pellow POs] = pvt1.[Frank Pellow],
[Frank Pellow Amount] = '$' + convert(VARCHAR,pvt2.[Frank Pellow],1),
[Reinout Hillmann POs] = pvt1.[Reinout Hillmann],
[Reinout Hillmann Amount] = '$' + convert(VARCHAR,pvt2.[Reinout Hillmann],1)
FROM cteVendorPO
PIVOT
(COUNT(PurchaseOrderID)
FOR Employee IN ( [Erin Hagens],[Linda Meisner],[Sheela Word],
[Frank Pellow],[Reinout Hillmann] ) ) AS pvt1
JOIN cteVendorTotalDue
PIVOT
(sum(totaldue)
FOR Employee IN ( [Erin Hagens],[Linda Meisner],[Sheela Word],
[Frank Pellow],[Reinout Hillmann] ) ) AS pvt2
ON pvt1.Vendor = pvt2.Vendor
AND pvt1.State = pvt2.State
AND pvt1.Country = pvt2.Country
ORDER BY pvt1.Country,
pvt1.State, pvt1.Vendor
Here is the partial result:
GO
;WITH cteVendorPO
AS (SELECT PurchaseOrderID,
Country = cr.Name,
State = StateProvinceCode,
Employee = FirstName + ' ' + LastName,
Vendor = v.Name
FROM Purchasing.PurchaseOrderHeader poh
JOIN HumanResources.Employee e
ON poh.EmployeeID = e.EmployeeID
JOIN Person.Contact c
ON e.ContactID = c.ContactID
JOIN Purchasing.Vendor v
ON v.VendorID = poh.VendorID
JOIN Purchasing.VendorAddress va
ON v.VendorID = va.VendorID
JOIN Person.Address a
ON a.AddressID = va.AddressID
JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
JOIN Person.CountryRegion cr
ON cr.CountryRegionCode = sp.CountryRegionCode),
cteVendorTotalDue
AS (SELECT Employee = FirstName + ' ' + LastName,
Country = cr.Name,
State = StateProvinceCode,
Vendor = v.Name,
TotalDue
FROM Purchasing.PurchaseOrderHeader poh
JOIN HumanResources.Employee e
ON poh.EmployeeID = e.EmployeeID
JOIN Person.Contact c
ON e.ContactID = c.ContactID
JOIN Purchasing.Vendor v
ON v.VendorID = poh.VendorID
JOIN Purchasing.VendorAddress va
ON v.VendorID = va.VendorID
JOIN Person.Address a
ON a.AddressID = va.AddressID
JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
JOIN Person.CountryRegion cr
ON cr.CountryRegionCode = sp.CountryRegionCode)
SELECT pvt1.Country,
pvt1.State,
pvt1.Vendor,
[Erin Hagens POs] = pvt1.[Erin Hagens],
[Erin Hagens Amount] = '$' + convert(VARCHAR,pvt2.[Erin Hagens],1),
[Linda Meisner POs] = pvt1.[Linda Meisner],
[Linda Meisner Amount] = '$' + convert(VARCHAR,pvt2.[Linda Meisner],1),
[Sheela Word POs] = pvt1.[Sheela Word],
[Sheela Word Amount] = '$' + convert(VARCHAR,pvt2.[Sheela Word],1),
[Frank Pellow POs] = pvt1.[Frank Pellow],
[Frank Pellow Amount] = '$' + convert(VARCHAR,pvt2.[Frank Pellow],1),
[Reinout Hillmann POs] = pvt1.[Reinout Hillmann],
[Reinout Hillmann Amount] = '$' + convert(VARCHAR,pvt2.[Reinout Hillmann],1)
FROM cteVendorPO
PIVOT
(COUNT(PurchaseOrderID)
FOR Employee IN ( [Erin Hagens],[Linda Meisner],[Sheela Word],
[Frank Pellow],[Reinout Hillmann] ) ) AS pvt1
JOIN cteVendorTotalDue
PIVOT
(sum(totaldue)
FOR Employee IN ( [Erin Hagens],[Linda Meisner],[Sheela Word],
[Frank Pellow],[Reinout Hillmann] ) ) AS pvt2
ON pvt1.Vendor = pvt2.Vendor
AND pvt1.State = pvt2.State
AND pvt1.Country = pvt2.Country
ORDER BY pvt1.Country,
pvt1.State, pvt1.Vendor
Here is the partial result:
Country | State | Vendor | Erin Hagens POs | Erin Hagens Amount | Linda Meisner POs | Linda Meisner Amount |
United States | AZ | Greenwood Athletic Company | 5 | $242,428.44 | 5 | $242,428.44 |
United States | CA | Allenson Cycles | 4 | $39,105.07 | 5 | $48,881.33 |
United States | CA | American Bicycles and Wheels | 4 | $756.16 | 5 | $945.20 |
United States | CA | American Bikes | 4 | $90,156.07 | 5 | $112,695.08 |
United States | CA | Anderson's Custom Bikes | 5 | $80,820.11 | 6 | $96,984.14 |
United States | CA | Bloomington Multisport | 4 | $646.58 | 5 | $808.23 |
United States | CA | Capital Road Cycles | 5 | $75,523.57 | 5 | $75,523.57 |
United States | CA | Chicago City Saddles | 4 | $211,982.90 | 5 | $168,544.88 |
United States | CA | Chicago Rent-All | 4 | $2,439.31 | 5 | $3,049.14 |
United States | CA | Comfort Road Bicycles | 5 | $155,099.32 | 5 | $155,099.32 |
United States | CA | Consumer Cycles | 4 | $264.95 | 6 | $397.43 |
United States | CA | Continental Pro Cycles | 5 | $1,691.92 | 5 | $1,418.96 |
No comments:
Post a Comment