Guest User

Untitled

a guest
Apr 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. A B C
  2. 1 1 1
  3. NULL 1 2
  4. NULL 2 1
  5. 2 2 2
  6.  
  7. A B C D
  8. 1 1 1 X
  9. 2 1 1 Y
  10. 1 1 2 Z
  11. 2 1 2 X
  12. 1 2 1 Y
  13. 2 2 1 Z
  14. 1 2 2 X
  15. 2 2 2 Z
  16.  
  17. A B C D
  18. 1 1 1 X
  19. 1 1 2 Z
  20. 1 2 1 Y
  21. 2 2 2 Y
  22.  
  23. SELECT TMP1.*, TMP2.D
  24. FROM TMP1
  25.  
  26. LEFT JOIN TMP2
  27. ON CASE
  28. WHEN TMP1.A IS NOT NULL
  29. THEN 'TMP1.A = TMP2.A
  30. AND TMP1.B = TMP2.B
  31. AND TMP1.C = TMP2.C'
  32. WHEN TMP1.A IS NULL
  33. THEN 'TMP1.A = MIN(TMP2.A) OVER (PARTITION BY TMP2.B, TMP2.C)
  34. AND TMP1.B = TMP2.B
  35. AND TMP1.C = TMP2.C'
  36. END
  37.  
  38. SELECT TMP1.*, TMP2.D
  39. FROM TMP1 LEFT JOIN
  40. TMP2
  41. ON (TMP1.A IS NOT NULL AND TMP1.A = TMP2.A AND TMP1.B = TMP2.B AND
  42. TMP1.C = TMP2.C
  43. ) OR
  44. (TMP1.A IS NULL AND TMP1.A = MIN(TMP2.A) OVER (PARTITION BY TMP2.B, TMP2.C) AND
  45. TMP1.B = TMP2.B AND TMP1.C = TMP2.C
  46. )
  47.  
  48. SELECT TMP1.*, TMP2.D
  49. FROM TMP1 LEFT JOIN
  50. (SELECT TMP2.*,
  51. MIN(TMP2.A) OVER (PARTITION BY TMP2.B, TMP2.C) as MIN_A
  52. FROM TMP2
  53. ) TMP2
  54. ON (TMP1.A IS NOT NULL AND TMP1.A = TMP2.A AND TMP1.B = TMP2.B AND
  55. TMP1.C = TMP2.C
  56. ) OR
  57. (TMP1.A IS NULL AND TMP1.A = TMP2.MIN_A AND
  58. TMP1.B = TMP2.B AND TMP1.C = TMP2.C
  59. )
Add Comment
Please, Sign In to add comment