Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. USE [AdventureWorks2014];
  2. go
  3.  
  4. SELECT sub.Name, prd.Name, YEAR(soh.OrderDate),
  5. sod.OrderQty
  6.  
  7. FROM [Sales].[SalesOrderDetail] sod
  8. JOIN [Sales].[SalesOrderHeader] soh
  9. ON (sod.SalesOrderID = soh.SalesOrderID)
  10. JOIN [Production].[Product] prd
  11. ON (sod.ProductID = prd.ProductID)
  12. JOIN [Production].[ProductSubcategory] sub
  13. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID)
  14.  
  15. ORDER BY 1, 2, 3;
  16. go
  17.  
  18.  
  19. -- Wrap the previous in a cte
  20. WITH UnitSold (categoryName, productName, yearSold, units)
  21. AS (SELECT sub.Name, prd.Name, YEAR(soh.OrderDate),
  22. sod.OrderQty
  23.  
  24. FROM [Sales].[SalesOrderDetail] sod
  25. JOIN [Sales].[SalesOrderHeader] soh
  26. ON (sod.SalesOrderID = soh.SalesOrderID)
  27. JOIN [Production].[Product] prd
  28. ON (sod.ProductID = prd.ProductID)
  29. JOIN [Production].[ProductSubcategory] sub
  30. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID))
  31.  
  32. SELECT *
  33. FROM UnitSold;
  34. go
  35.  
  36.  
  37. -- Use the previous CTE to determine the different years a product was sold
  38. WITH UnitSold (categoryName, productName, yearSold, units)
  39. AS (SELECT sub.Name, prd.Name, YEAR(soh.OrderDate),
  40. sod.OrderQty
  41.  
  42. FROM [Sales].[SalesOrderDetail] sod
  43. JOIN [Sales].[SalesOrderHeader] soh
  44. ON (sod.SalesOrderID = soh.SalesOrderID)
  45. JOIN [Production].[Product] prd
  46. ON (sod.ProductID = prd.ProductID)
  47. JOIN [Production].[ProductSubcategory] sub
  48. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID))
  49.  
  50. SELECT DISTINCT yearSold
  51. FROM UnitSold;
  52. go
  53.  
  54.  
  55. -- Pivot the previous CTE to display the total products sold per category
  56. -- for each year
  57. WITH UnitSold (categoryName, yearSold, units)
  58. AS (SELECT sub.Name, YEAR(soh.OrderDate),
  59. sod.OrderQty
  60.  
  61. FROM [Sales].[SalesOrderDetail] sod
  62. JOIN [Sales].[SalesOrderHeader] soh
  63. ON (sod.SalesOrderID = soh.SalesOrderID)
  64. JOIN [Production].[Product] prd
  65. ON (sod.ProductID = prd.ProductID)
  66. JOIN [Production].[ProductSubcategory] sub
  67. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID))
  68.  
  69. SELECT categoryName, [2011], [2012], [2013], [2014]
  70. FROM UnitSold
  71. PIVOT (SUM(units) FOR yearSold in ([2011], [2012], [2013], [2014])) AS pvt;
  72. go
  73.  
  74.  
  75. -- Rank each product per category based on the total units sold
  76. WITH UnitSold (categoryName, productName, yearSold, units)
  77. AS (SELECT sub.Name, prd.Name, YEAR(soh.OrderDate),
  78. sod.OrderQty
  79.  
  80. FROM [Sales].[SalesOrderDetail] sod
  81. JOIN [Sales].[SalesOrderHeader] soh
  82. ON (sod.SalesOrderID = soh.SalesOrderID)
  83. JOIN [Production].[Product] prd
  84. ON (sod.ProductID = prd.ProductID)
  85. JOIN [Production].[ProductSubcategory] sub
  86. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID))
  87.  
  88. SELECT categoryName, productName, SUM(units) as 'Units sold',
  89. RANK() OVER(PARTITION BY categoryName ORDER BY SUM(units) DESC) AS 'Rank',
  90. DENSE_RANK() OVER(PARTITION BY categoryName ORDER BY SUM(units) DESC) AS 'Dense rank'
  91.  
  92. FROM UnitSold
  93. GROUP BY categoryName, productName
  94. ORDER BY 1 ASC, 4 ASC;
  95. go
  96.  
  97.  
  98.  
  99. -- Revise the previous to include a 10 row pagination
  100. WITH UnitSold (categoryName, productName, yearSold, units)
  101. AS (SELECT sub.Name, prd.Name, YEAR(soh.OrderDate),
  102. sod.OrderQty
  103.  
  104. FROM [Sales].[SalesOrderDetail] sod
  105. JOIN [Sales].[SalesOrderHeader] soh
  106. ON (sod.SalesOrderID = soh.SalesOrderID)
  107. JOIN [Production].[Product] prd
  108. ON (sod.ProductID = prd.ProductID)
  109. JOIN [Production].[ProductSubcategory] sub
  110. ON (prd.ProductSubcategoryID = sub.ProductSubcategoryID))
  111.  
  112. SELECT categoryName, productName, SUM(units) as 'Units sold',
  113. RANK() OVER(PARTITION BY categoryName ORDER BY SUM(units) DESC) AS 'Rank',
  114. DENSE_RANK() OVER (PARTITION BY categoryName ORDER BY SUM(units) DESC) AS 'Dense rank',
  115. ROW_NUMBER() OVER (ORDER BY categoryName ASC, SUM(units) DESC)
  116.  
  117. FROM UnitSold
  118. GROUP BY categoryName, productName
  119. ORDER BY 1 ASC, 4 ASC OFFSET 20 ROWS FETCH NEXT 10 ROWS only;
  120. go
  121.  
  122.  
  123. -- Unpivot the pivot statement
  124. WITH UnitSold (categoryName, yearSold, units)
  125. AS (SELECT sub.Name, YEAR(soh.OrderDate),
  126. sod.OrderQty
  127. FROM [Sales].[SalesOrderDetail] sod
  128. JOIN [Sales].[SalesOrderHeader] soh
  129. ON (sod.SalesOrderID=soh.SalesOrderID)
  130. JOIN [Production].[Product] prd
  131. ON (sod.productId=prd.productId)
  132. JOIN [Production].[ProductSubcategory] sub
  133. ON (prd.ProductSubcategoryID=sub.ProductSubcategoryID)),
  134. pivotTable (categoryName, [2011], [2012], [2013], [2014])
  135. AS (SELECT categoryName, [2011], [2012],[2013],[2014]
  136. FROM UnitSold
  137. PIVOT (SUM(units) FOR yearSold IN
  138. ([2011],[2012],[2013],[2014])) AS pvt)
  139. select *
  140. from pivotTable
  141. UNPIVOT (unitsSold FOR
  142. yearSold IN ([2011],[2012],[2013],[2014])) AS unpvt;
  143. go
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement