Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  1. set search_path to "_00000003";
  2.  
  3. EXPLAIN (ANALYZE , BUFFERS , VERBOSE )
  4.  
  5. WITH
  6. cteMyOfficeDocs AS (
  7. -- Области видимости
  8. SELECT unnest(current_setting('sbis3.rights.myOfficeDocs')::integer[]) deptId
  9. ),
  10.  
  11. -- Иерархия по отделам с учетом областей видимости (см. startDeptFilter)
  12. dept AS (
  13. WITH RECURSIVE sp AS (
  14. SELECT
  15. x."@Лицо" "Лицо",
  16. x."Раздел",
  17. x."Название",
  18. x."Раздел@",
  19. x."Тип"
  20. FROM
  21. "СтруктураПредприятия" x
  22. WHERE
  23. x."Тип" = 0
  24. AND "@Лицо" = 14466736
  25. UNION ALL
  26. SELECT
  27. z."@Лицо" "Лицо",
  28. z."Раздел",
  29. z."Название",
  30. z."Раздел@",
  31. z."Тип"
  32. FROM
  33. "СтруктураПредприятия" z
  34. INNER JOIN sp y ON z."Раздел" = y."Лицо" AND z."Тип" = y."Тип"
  35. WHERE
  36. z."$Черновик" IS NULL AND z."ДатаЗакрытия" IS NULL
  37. )
  38. SELECT "Лицо", "Раздел", "Название", "Раздел@" FROM sp
  39. ),
  40.  
  41. -- Сотрудники отделов
  42. deptUsers AS (
  43. SELECT
  44. (sv)."ЧастноеЛицо" "Лицо",
  45. (sv)."СтруктураПредприятия",
  46. (
  47. select
  48. coalesce(p."Фамилия" || ' ', '') || coalesce(substr(p."Имя", 1, 1) || '.', '') || coalesce(substr(p."Отчество", 1, 1) || '.', '' )
  49. from "ЧастноеЛицо" p
  50. where (sv)."ЧастноеЛицо" = p."@Лицо"
  51. ) "Название",
  52. (sv)."Пользователь"
  53. FROM (
  54. SELECT unnest(array(
  55. SELECT
  56. sv
  57. FROM "СвязиПользователя" sv
  58. INNER JOIN "ЧастноеЛицо" p ON sv."ЧастноеЛицо" = p."@Лицо"
  59.  
  60. WHERE
  61. sv."ЧастноеЛицо" IS NOT NULL AND
  62. sv."УправленческаяСтруктура" AND
  63. sv."$Черновик" is null AND
  64. p."Тип" = 0
  65. AND d."Лицо" = sv."СтруктураПредприятия"
  66. )) sv
  67. FROM dept d
  68. ) as foo
  69. WHERE (SELECT COUNT(1) FROM dept) <= 4
  70. UNION ALL
  71. SELECT
  72. sv."ЧастноеЛицо" "Лицо",
  73. sv."СтруктураПредприятия",
  74. coalesce(p."Фамилия" || ' ', '') || coalesce(substr(p."Имя", 1, 1) || '.', '') || coalesce(substr(p."Отчество", 1, 1) || '.', '' ) "Название",
  75. sv."Пользователь"
  76. FROM "СвязиПользователя" sv
  77. INNER JOIN "ЧастноеЛицо" p ON sv."ЧастноеЛицо" = p."@Лицо"
  78.  
  79. WHERE
  80. (SELECT COUNT(1) FROM dept) > 4 AND
  81. sv."ЧастноеЛицо" IS NOT NULL AND
  82. sv."УправленческаяСтруктура" AND
  83. sv."$Черновик" is null AND
  84. p."Тип" = 0
  85. AND EXISTS (
  86. SELECT NULL
  87. FROM dept d
  88. WHERE d."Лицо" = sv."СтруктураПредприятия"
  89. )
  90.  
  91. )
  92.  
  93. ,
  94. -- Темы отношений
  95. theme AS (
  96. WITH RECURSIVE regs AS (
  97. SELECT
  98. x."@Регламент" "Регламент",
  99. x."Раздел",
  100. x."Раздел@",
  101. x."Название",
  102. x."Флаги",
  103. x."Лимит",
  104. x."Порядок",
  105. x."Норма",
  106. x."Флаги"[3] "Удален"
  107. FROM "Регламент" x
  108. WHERE
  109. x."Идентификатор" = '8992e41a-a499-11e1-8c02-63ba74c41964'
  110. UNION ALL
  111. SELECT
  112. y."@Регламент" "Регламент",
  113. y."Раздел",
  114. y."Раздел@",
  115. y."Название",
  116. y."Флаги",
  117. y."Лимит",
  118. y."Порядок",
  119. y."Норма",
  120. y."Флаги"[3] "Удален"
  121. FROM regs z
  122. INNER JOIN "Регламент" y on z."Регламент" = y."Раздел"
  123. )
  124. SELECT * FROM regs
  125. WHERE "Удален" IS NOT TRUE AND "Раздел@" IS NOT TRUE
  126. )
  127.  
  128. , themeFiltered AS (
  129. SELECT t."Регламент"
  130. , t."БезКонтактов"
  131. , t."ВРаботе"
  132. , t."ЗавершеноОтрицательно"
  133. , t."ЗавершеноПоложительно"
  134. FROM "ТемаСостояние" t
  135. WHERE "Регламент" IS NOT NULL AND
  136. EXISTS (
  137. SELECT NULL
  138. FROM deptUsers u
  139. WHERE t."Лицо" = u."Лицо"
  140. )
  141.  
  142. AND EXISTS(SELECT NULL FROM theme r WHERE r."Регламент" = t."Регламент")
  143. )
  144. , themeStat1 AS (
  145. SELECT "Регламент" AS id, 'CRMTheme'::text AS tip,
  146. COALESCE(SUM("БезКонтактов"), 0) AS "БезКонтактов",
  147. COALESCE(SUM("ВРаботе"), 0) AS "ВРаботе",
  148. COALESCE(SUM("ЗавершеноПоложительно"), 0) AS "ЗавершеноПоложительно",
  149. COALESCE(SUM("ЗавершеноОтрицательно"), 0) AS "ЗавершеноОтрицательно"
  150. FROM themeFiltered t
  151. GROUP BY "Регламент"
  152. )
  153. , themeStat2 AS (
  154. SELECT t.id, t.tip, t."БезКонтактов", t."ВРаботе", t."ЗавершеноПоложительно", t."ЗавершеноОтрицательно",
  155. ("БезКонтактов"+"ВРаботе"+"ЗавершеноПоложительно"+"ЗавершеноОтрицательно") AS "Всего",
  156. r."Название",
  157. r."Порядок"
  158. FROM themeStat1 t
  159. INNER JOIN theme r ON r."Регламент" = t.id
  160. )
  161. , leads_prosr AS (
  162. SELECT count((a)) kol --(a).*
  163. FROM (
  164. SELECT unnest(ARRAY(
  165. SELECT unnest(ARRAY(
  166. SELECT ld
  167. FROM "Лид" ld
  168. WHERE
  169. ld."Черновик" IS NULL AND
  170. ld."ПоследнийКонтакт" IS NULL AND
  171. ld."Регламент" = t."Регламент" and
  172. ld."Подразделение" = d."Лицо" and
  173.  
  174. ld."Фаза" IS NULL AND
  175. t."Лимит" IS NOT NULL AND
  176. ld."СозданиеДата" >= (date_trunc('day', now()) - '2 years'::INTERVAL)::DATE AND
  177. ld."СозданиеДата" < (date_trunc('day', now())::date - t."Лимит")::DATE
  178. ORDER BY "ДатаСоздания" DESC NULLS LAST
  179. LIMIT 100
  180. )) a
  181. FROM theme t
  182. )) a
  183. FROM dept d
  184. ) t
  185. )
  186.  
  187. -- для лидов новых и просроченных
  188. SELECT -1 AS id, 'Lead'::text AS tip, 'Непрочитанные' AS "Название", (/*(SELECT COUNT(1) FROM leads)::text*/ '' || ';' || (SELECT kol FROM leads_prosr)::text) AS "Всего", ''::text AS "ЗавершеноПоложительно"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement