Guest User

Untitled

a guest
Jan 16th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. Ta(ID, Field1)
  2. Tb(ID, Field2)
  3. Tc(ID, Field3)
  4.  
  5. Ta
  6. ID Field1
  7. ---------
  8. 1 A
  9. 1 B
  10.  
  11. Tb
  12. ID Field2
  13. ---------
  14. 1 C
  15. 1 D
  16. 2 E
  17.  
  18. Tc
  19. ID Field3
  20. ---------
  21. 1 F
  22. 2 G
  23. 2 H
  24.  
  25. ID Field1 Field2 Field3
  26. -----------------------
  27. 1 A C F
  28. 1 B D NULL
  29. 2 NULL E G
  30. 2 NULL NULL H
  31.  
  32. PID Email
  33. ---------
  34. John john@test.com
  35. John john@mail.com
  36. John john@john.com
  37.  
  38. PID Tel
  39. --------
  40. John 011
  41. John 022
  42.  
  43. PID Email Tel
  44. ----------------------
  45. John john@test.com 011
  46. John john@mail.com 022
  47. John john@john.com NULL
  48.  
  49. select coalesce(ta.id, tb.id, tc.id), ta.field1, tb.field2, tc.field3
  50. from (select ta.*, row_number() over (partition by id order by (select NULL)) as seqnum
  51. from ta
  52. ) ta full outer join
  53. (select tb.*, row_number() over (partition by id order by (select NULL)) as seqnum
  54. from tb
  55. ) tb
  56. on ta.id = tb.id and
  57. ta.seqnum = tb.seqnum
  58. (select tc.*, row_number() over (partition by id order by (select NULL)) as seqnum
  59. from tc
  60. ) tc
  61. on coalesce(ta.id, tb.id) = tc.id and
  62. coalesce(ta.seqnum, tb.seqnum) = tc.seqnum
  63. group by coalesce(ta.id, tb.id, tc.id),
  64. coalesce(ta.seqnum, tb.seqnum, tc.seqnum)
  65. order by 1, 2
  66.  
  67. over (partition by id order by field<n>)
  68.  
  69. WITH TaRanked AS
  70. (
  71. SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Field1) as Rnk, ID, Field1
  72. FROM Ta
  73. ),
  74. TbRanked AS
  75. (
  76. SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Field2) as Rnk, ID, Field2
  77. FROM Tb
  78. ),
  79. TcRanked AS
  80. (
  81. SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Field3) as Rnk, ID, Field3
  82. FROM Tc
  83. ),
  84. TUnion AS
  85. (
  86. SELECT Rnk, ID, Field1, NULL AS Field2, NULL AS Field3
  87. FROM TaRanked
  88. UNION ALL
  89. SELECT Rnk, ID, NULL, Field2, NULL
  90. FROM TbRanked
  91. UNION ALL
  92. SELECT Rnk, ID, NULL, NULL, Field3
  93. FROM TcRanked
  94. )
  95. SELECT ID, MIN(Field1), MIN(Field2), MIN(Field3)
  96. FROM TUnion
  97. GROUP BY ID, Rnk
  98. ORDER BY ID, Rnk
  99.  
  100. 1 A C F
  101. 1 B D (null)
  102. 2 (null) E G
  103. 2 (null) (null) H
Add Comment
Please, Sign In to add comment