Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 26th, 2012  |  syntax: None  |  size: 1.45 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How do I achieve transposing of rows into columns in MS SQL
  2. id, Name
  3. 1, Marketing
  4. 2, Sales
  5.        
  6. id, Name, DepartmentId, RatePerDay
  7. 1, Alex,1, 40
  8. 2, Bob,1, 30
  9. 3, Calvin,1, 40
  10. 4, Dal,1, 30
  11.        
  12. DepartmentName, Employee1,Employee12,Employee13,Employee14
  13. Marketing, Alex, Bob, Calvin, Dal
  14.  
  15. DepartmentName, RatePerDay1, RatePerDay2, RatePerDay3, RatePerDay4
  16. Marketing, 40,30,40,30
  17.        
  18. DECLARE @EmployeesId VARCHAR(MAX), @EmployeesIdAlias VARCHAR(MAX), @Query1 VARCHAR(MAX), @Query2 VARCHAR(MAX)
  19. DECLARE @Rates VARCHAR(MAX), @RatesAlias VARCHAR(MAX)
  20.  
  21. SELECT  @EmployeesId = ISNULL(@EmployeesId + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + ']',
  22.         @EmployeesIdAlias = ISNULL(@EmployeesIdAlias + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + '] AS [Employee ' + CAST(Id AS VARCHAR(10)) + ']',
  23.         @RatesAlias = ISNULL(@RatesAlias + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + '] AS [Rate ' + CAST(Id AS VARCHAR(10)) + ']'
  24. FROM Employees
  25.  
  26.  
  27. SET @Query1 = '
  28. SELECT Department, '+@EmployeesIdAlias+'
  29. FROM (  SELECT A.Id, A.Name, B.Name Department
  30.         FROM Employees A
  31.         INNER JOIN Department B
  32.         ON A.DepartmentId = B.Id) Source
  33. PIVOT(MIN(Name) FOR Id IN ('+@EmployeesId+')) AS PT'
  34.  
  35. EXEC(@Query1)
  36.  
  37. SET @Query2 = '
  38. SELECT Department, '+@RatesAlias+'
  39. FROM (  SELECT A.Id, A.RatePerDay, B.Name Department
  40.         FROM Employees A
  41.         INNER JOIN Department B
  42.         ON A.DepartmentId = B.Id) Source
  43. PIVOT(MIN(RatePerDay) FOR Id IN ('+@EmployeesId+')) AS PT'
  44.  
  45. EXEC(@Query2)