Advertisement
Makcimm

Untitled

Jan 22nd, 2020
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. MERGE INTO appeals apl
  2. USING (
  3. -- все обращения, по которым необходимо проставить FID-ы
  4. WITH sq_appeals AS (
  5. SELECT
  6. id_appeal
  7. , fid_appeal
  8. , fid_type
  9. FROM
  10. appeals
  11. WHERE
  12. fid_post_data_status = -1
  13. AND fid_type IN (1, 2, 4, 7)
  14. )
  15. -- обращения клиентов
  16. , sq_client_appeals AS (
  17. SELECT
  18. ca.ext_id
  19. , ca.ops_index AS ops_index
  20. , apl.fid_type
  21. , ca.ufps_name AS ufps_name
  22. , apl.id_appeal
  23. FROM
  24. sq_appeals apl
  25. JOIN client_appeals ca
  26. ON apl.fid_appeal = ca.ext_id
  27. AND apl.fid_type = 1
  28. )
  29. -- обращения сотрудников
  30. , sq_staff_appeals AS (
  31. SELECT
  32. sa.ext_id
  33. , sa.ops AS ops_index
  34. , apl.fid_type
  35. , sa.ufps_title AS ufps_name
  36. , apl.id_appeal
  37. FROM
  38. sq_appeals apl
  39. JOIN staff_appeals sa
  40. ON apl.fid_appeal = sa.ext_id
  41. AND apl.fid_type = 2
  42. )
  43. -- обращения по доступной среде
  44. , sq_av_env_appeals AS (
  45. SELECT
  46. aa.ext_id
  47. , aa.post_index AS ops_index
  48. , apl.fid_type
  49. , NULL AS ufps_name
  50. , apl.id_appeal
  51. FROM
  52. sq_appeals apl
  53. JOIN available_env_appeals aa
  54. ON apl.fid_appeal = aa.ext_id
  55. AND apl.fid_type = 4
  56. )
  57. -- обращения по типу пенсии
  58. , sq_pension_appeals AS (
  59. SELECT
  60. pa.ext_id
  61. , pa.ops_index AS ops_index
  62. , apl.fid_type
  63. , NULL AS ufps_name
  64. , apl.id_appeal
  65. FROM
  66. sq_appeals apl
  67. JOIN pension_appeals pa
  68. ON apl.fid_appeal = pa.ext_id
  69. AND apl.fid_type = 7
  70. )
  71. -- все обращения, по которым необходимо проставить FID-ы
  72. , sq_all_appeals AS (
  73. SELECT * FROM sq_client_appeals
  74. UNION
  75. SELECT * FROM sq_staff_appeals
  76. UNION
  77. SELECT * FROM sq_av_env_appeals
  78. UNION
  79. SELECT * FROM sq_pension_appeals
  80. )
  81. --формируем справочник МР-УФПС
  82. , sq_ufps_mr as (
  83. SELECT DISTINCT FID_MR, FID_UFPS
  84. FROM MV_REL_MR_UFPS_POST
  85. )
  86. SELECT
  87. aa.id_appeal
  88. , CASE
  89. WHEN po.post_index IS NOT NULL -- нашлась связь в справочнике D_AVITO_POST_OFFICES
  90. THEN 0
  91. WHEN (aa.ops_index IS NOT NULL) AND (REGEXP_LIKE(aa.ops_index, '\d{6}')) -- индекс из обращения не найден в справочнике D_AVITO_POST_OFFICES,
  92. THEN 1 -- либо в поле индекса записан не индекс
  93. WHEN du.id_ufps IS NOT NULL -- индекса нет (либо он некорректный), но нашлось соответствие по УФПС в справочнике D_UFPS
  94. THEN 0
  95. WHEN aa.ufps_name IS NOT NULL -- УФПС не найден в справочнике D_UFPS
  96. THEN 2
  97. ELSE 3 -- не проставлен ни индекс, ни УФПС
  98. END AS fid_post_data_status
  99. , CASE WHEN po.post_index IS NOT NULL THEN po.fid_post_office END AS fid_post_office
  100. , CASE
  101. WHEN po.post_index IS NOT NULL THEN po.fid_ufps
  102. ELSE du.id_ufps
  103. END AS fid_ufps
  104. , CASE
  105. WHEN po.post_index IS NOT NULL THEN po.fid_mr
  106. ELSE rl.fid_mr
  107. END AS fid_mr
  108. FROM
  109. sq_all_appeals aa
  110. LEFT JOIN d_avito_post_offices po
  111. ON TRIM(aa.ops_index) = TRIM(po.post_index)
  112. LEFT JOIN d_ufps du
  113. ON UPPER(TRIM(aa.ufps_name)) = UPPER(TRIM(du.ufps_name))
  114. LEFT JOIN sq_ufps_mr rl
  115. ON du.id_ufps = rl.fid_ufps
  116. ) sq
  117. ON (apl.id_appeal = sq.id_appeal)
  118. WHEN MATCHED THEN
  119. UPDATE SET
  120. apl.fid_mr = sq.fid_mr
  121. , apl.fid_ufps = sq.fid_ufps
  122. , apl.fid_post_office = sq.fid_post_office
  123. , apl.fid_post_data_status = sq.fid_post_data_status
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement