Advertisement
tyomasun

Untitled

Jul 6th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.94 KB | None | 0 0
  1. SET SEARCH_PATH = _00000003, public;
  2. /*
  3.  
  4. DROP INDEX _00000003."iЛид-РегламентДатаTmp";
  5. CREATE INDEX "iЛид-РегламентДатаTmp"
  6.   ON _00000003."Лид"
  7.   USING btree
  8.   ("Регламент", COALESCE("ДатаФазы", "ДатаСоздания"));
  9. */
  10. EXPLAIN (analyze, buffers, verbose)
  11.  
  12.  WITH  cteMyOfficeDocs AS
  13.       (
  14.          -- Области видимости
  15.          SELECT  UNNEST ( current_setting ( 'sbis3.rights.myOfficeDocs' ) ::INTEGER[] ) deptId
  16.       )
  17.           , -- Иерархия по отделам с учетом областей видимости (см. startDeptFilter)
  18.        DEPT AS
  19.       (
  20.          WITH  RECURSIVE SP AS
  21.             (
  22.                SELECT  x."@Лицо" "Лицо"
  23.                                 ,  x."Раздел"
  24.                                 ,  x."Название"
  25.                                 ,  x."Раздел@"
  26.                   FROM  "СтруктураПредприятия" x
  27.                   WHERE  x."Тип" = 0
  28.                      AND  "Раздел" IS NULL
  29.                UNION  ALL
  30.                SELECT  z."@Лицо" "Лицо"
  31.                                 ,  z."Раздел"
  32.                                 ,  z."Название"
  33.                                 ,  z."Раздел@"
  34.                   FROM  SP y
  35.                      INNER  JOIN "СтруктураПредприятия" z
  36.                         ON  z."Раздел" = y."Лицо"
  37.                   WHERE  z."Тип" = 0
  38.             )
  39.          SELECT  *
  40.             FROM  SP
  41.       )
  42.           , -- Сотрудники отделов
  43.        deptUsers AS
  44.       (
  45.          SELECT  sv."ЧастноеЛицо" "Лицо"
  46.                       ,  sv."СтруктураПредприятия"
  47.                       ,  COALESCE ( p."Фамилия" || ' ' ,  '' ) || COALESCE ( SUBSTR ( p."Имя" ,  1 ,  1 ) || '.' ,  '' ) || COALESCE ( SUBSTR ( p."Отчество" ,  1 ,  1 ) || '.' ,  '' ) "Название"
  48.                       ,  sv."Пользователь"
  49.             FROM  "СвязиПользователя" SV
  50.                INNER  JOIN "ЧастноеЛицо" p
  51.                   ON  sv."ЧастноеЛицо" = p."@Лицо"
  52.             WHERE  sv."ЧастноеЛицо" IS NOT NULL
  53.                AND  sv."УправленческаяСтруктура"
  54.                AND  sv."$Черновик" IS NULL
  55.                AND  EXISTS
  56.                   (
  57.                      SELECT  NULL
  58.                         FROM  DEPT d
  59.                         WHERE  d."Лицо" = sv."СтруктураПредприятия"
  60.                   )
  61.       )
  62.           ,  leadlist AS
  63.       (
  64.          SELECT  ld."@Документ"
  65.                       ,  COALESCE ( ld."ДатаФазы" ,  ld."ДатаСоздания" ) "ДатаФазы"
  66.                       ,  ld."Контрагент"
  67.                       ,  ld."Регламент"
  68.                       ,  ld."Фаза"
  69.                       ,  ld."ДатаСоздания"
  70.                       ,  ld."Результат" "Состояние"
  71.                       ,  ld."ПоследнийКонтакт"
  72.                       ,  ld."Сотрудник"
  73.                       ,  ld."Подразделение"
  74.                       ,  ld."НазваниеКлиента"
  75.                       ,  ld."КонтактныеДанные"
  76.                       ,  FALSE "Раздел@"
  77.                       ,  NULL "Раздел"
  78.             FROM  "Лид" LD
  79.             WHERE  TRUE
  80.                AND  ld."Результат" IS NULL
  81.                AND  ld."Черновик" IS NULL
  82.                AND  ld."Регламент" = 121
  83.             ORDER  BY COALESCE ( ld."ДатаФазы" ,  ld."ДатаСоздания" ) DESC
  84.             LIMIT 21 OFFSET 0
  85.       )
  86.           ,  phases_num AS
  87.       (
  88.          SELECT  ROW_NUMBER ( ) OVER (
  89.             PARTITION  BY "Регламент"
  90.             ORDER  BY "ПорНомер" ) "ФазаНомер"
  91.                               ,  "@Фаза"
  92.                               ,  "Регламент"
  93.             FROM  "Фаза" f
  94.             WHERE  EXISTS
  95.                (
  96.                   SELECT  NULL
  97.                      FROM  leadlist
  98.                      WHERE  leadlist."Регламент" = f."Регламент"
  99.                )
  100.       )
  101.           ,  phases_cnt AS
  102.       (
  103.          SELECT  COUNT ( "@Фаза" ) "ФазаВсего"
  104.                       ,  "Регламент"
  105.             FROM  phases_num
  106.             GROUP  BY "Регламент"
  107.       )
  108.    SELECT  ll.*
  109.             ,  s."ВидКонтакта"
  110.             ,  COALESCE ( s."Примечание" ,  '' ) "СобытиеПримечание"
  111.             ,  COALESCE ( s."ТипКонтакта" ,  0 ) "ТипКонтакта"
  112.             ,  COALESCE
  113.       (
  114.          (
  115.             SELECT  ( COALESCE ( pp."Фамилия" ,  '' ) || ' ' || COALESCE ( pp."Имя" ,  '' ) || ' ' || COALESCE ( pp."Отчество" ,  '' ) )
  116.                FROM  "Представитель" p
  117.                   LEFT  JOIN "ЧастноеЛицо" PP
  118.                      ON  pp."@Лицо" = p."ЧастноеЛицо"
  119.                WHERE  ll."Контрагент" = p."Контрагент" LIMIT 1
  120.          )
  121.                ,
  122.           ''
  123.       )
  124.        "КлиентПредставитель"
  125.             ,  px."Результат"
  126.             ,  px."ФазаСледствие"
  127.             ,  s."ЗвонокАгента"
  128.             ,  rz."Название" "РезультатЗвонка"
  129.             ,  a."Запись" IS NOT NULL "Запись"
  130.             ,  a."НаправлениеИсходящий"
  131.             ,  ll."Сотрудник" "Исполнитель"
  132.             ,
  133.       (
  134.          SELECT  l."Название"
  135.             FROM  "Лицо" l
  136.             WHERE  l."@Лицо" = ll."Сотрудник"
  137.       )
  138.        "Исполнитель.Название"
  139.             ,  ll."Подразделение" "СтруктураПредприятия"
  140.             ,
  141.       (
  142.          SELECT  l."Название"
  143.             FROM  "Лицо" l
  144.             WHERE  l."@Лицо" = ll."Подразделение"
  145.       )
  146.        "СтруктураПредприятия.Название"
  147.             ,  COALESCE ( k."Название" ,  ll."НазваниеКлиента" ,  '' ) "КлиентНазвание"
  148.             ,  COALESCE ( kr."Телефон" ,  kr."email" ,  ll."КонтактныеДанные" ,  '' ) "КлиентКонтакт"
  149.             ,  f."Название" "ФазаНазвание"
  150.             ,  COALESCE ( r."Название" ,  '' ) "РегламентНазвание"
  151.             ,  pc."ФазаВсего"
  152.             ,  pn."ФазаНомер"
  153.       FROM  leadlist LL
  154.          LEFT  JOIN "Событие" s
  155.             ON  s."@Событие" = ll."ПоследнийКонтакт"
  156.          LEFT  JOIN "Переход" px
  157.             ON  px."@Переход" = s."Переход"
  158.          LEFT  JOIN "ЗвонокАгента" a
  159.             ON  a."@ЗвонокАгента" = s."ЗвонокАгента"
  160.          LEFT  JOIN "РезультатЗвонка" rz
  161.             ON  rz."@РезультатЗвонка" = a."РезультатЗвонка"
  162.          LEFT  JOIN "Контрагент" k
  163.             ON  k."@Лицо" = ll."Контрагент"
  164.          LEFT  JOIN "КонтрагентРасширение" kr
  165.             ON  kr."@Лицо" = k."@Лицо"
  166.          LEFT  JOIN "Фаза" f
  167.             ON  f."@Фаза" = ll."Фаза"
  168.          LEFT  JOIN "Регламент" r
  169.             ON  r."@Регламент" = ll."Регламент"
  170.          LEFT  JOIN phases_cnt pc
  171.             ON  ll."Регламент" = pc."Регламент"
  172.          LEFT  JOIN phases_num pn
  173.             ON  ll."Фаза" = pn."@Фаза"
  174.       ORDER  BY COALESCE ( ll."ДатаФазы" ,  ll."ДатаСоздания" ) DESC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement