Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. id | field | value
  2. ---------------------------------------
  3. 1 | year | 2011
  4. 1 | month | August
  5. 2 | year | 2009
  6. 1 | day | 21
  7. 2 | day | 31
  8. 2 | month | July
  9. 3 | year | 2010
  10. 3 | month | January
  11. 3 | day | NULL
  12.  
  13. id | year | month | day
  14. -----------------------------
  15. 1 2011 August 21
  16. 2 2010 July 31
  17. 3 2009 January NULL
  18.  
  19. DECLARE @myTable AS TABLE([ID] INT, [Field] VARCHAR(20), [Value] VARCHAR(20))
  20. INSERT INTO @myTable VALUES ('1', 'year', '2011')
  21. INSERT INTO @myTable VALUES ('1', 'month', 'August')
  22. INSERT INTO @myTable VALUES ('2', 'year', '2009')
  23. INSERT INTO @myTable VALUES ('1', 'day', '21')
  24. INSERT INTO @myTable VALUES ('2', 'day', '31')
  25. INSERT INTO @myTable VALUES ('2', 'month', 'July')
  26. INSERT INTO @myTable VALUES ('3', 'year', '2010')
  27. INSERT INTO @myTable VALUES ('3', 'month', 'January')
  28. INSERT INTO @myTable VALUES ('3', 'day', NULL)
  29.  
  30. SELECT [ID], [year], [month], [day]
  31. FROM
  32. (
  33. SELECT [ID], [Field], [Value] FROM @myTable
  34. ) t
  35. PIVOT
  36. (
  37. MIN([Value]) FOR [Field] IN ([year], [month], [day])
  38. ) AS pvt
  39. ORDER BY pvt.[year] DESC
  40.  
  41. ID year month day
  42. 1 2011 August 21
  43. 3 2010 January NULL
  44. 2 2009 July 31
  45.  
  46. ;WITH DATA(id,field,value) AS
  47. (
  48. SELECT 1,'year','2011' UNION ALL
  49. SELECT 1,'month','August' UNION ALL
  50. SELECT 2,'year','2009' UNION ALL
  51. SELECT 1,'day ','21' UNION ALL
  52. SELECT 2,'day ','31' UNION ALL
  53. SELECT 2,'month','July' UNION ALL
  54. SELECT 3,'year','2010' UNION ALL
  55. SELECT 3,'month','January' UNION ALL
  56. SELECT 3,'day ',NULL
  57. )
  58. SELECT id,
  59. year,
  60. month,
  61. day
  62. FROM DATA PIVOT (MAX(value) FOR field IN ([year], [month], [day])) AS Pvt
  63.  
  64. SELECT
  65. id,
  66. MAX(CASE WHEN RK=3 THEN VAL ELSE '' END) AS "YEAR",
  67. MAX(CASE WHEN RK=2 THEN VAL ELSE '' END) AS "MONTH",
  68. MAX(CASE WHEN RK=1 THEN VAL ELSE '' END) AS "DAY"
  69.  
  70. FROM
  71. (
  72. SELect
  73. ID,
  74. ROW_NUMBER() OVER(PARTITION BY ID ORDER BY YEAR1 ASC) RK,
  75. VAL
  76. FROM TEST3)A
  77. GROUP BY 1
  78. ORDER BY 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement