tyomasun

Untitled

Nov 12th, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.96 KB | None | 0 0
  1. SET search_path = _00000003, public;
  2.  
  3. EXPLAIN (analyze, buffers)
  4.  
  5. WITH
  6.       -- Иерархия по отделам с учетом областей видимости (см. startDeptFilter)
  7.       dept AS (
  8.          WITH RECURSIVE sp AS (
  9.             SELECT
  10.                x."@Лицо" "Лицо",
  11.                x."Раздел",
  12.                x."Название",
  13.                x."Раздел@"
  14.             FROM
  15.                "СтруктураПредприятия" x
  16.             WHERE
  17.                x."Тип" = 0 AND
  18.                x."Раздел" IS NULL
  19.        
  20.             UNION ALL
  21.  
  22.             SELECT
  23.                z."@Лицо" "Лицо",
  24.                z."Раздел",
  25.                z."Название",
  26.                z."Раздел@"
  27.             FROM
  28.                sp y
  29.             INNER JOIN "СтруктураПредприятия" z ON z."Раздел" = y."Лицо" AND z."$Черновик" IS NULL AND z."ДатаЗакрытия" IS NULL
  30.             WHERE
  31.                z."Тип" = 0
  32.          )
  33.          SELECT * FROM sp
  34.       ),
  35.  
  36. -- Сотрудники отделов
  37.       deptUsers AS (
  38.          SELECT
  39.             sv."ЧастноеЛицо" "Лицо",
  40.             sv."СтруктураПредприятия",
  41.             COALESCE(p."Фамилия" || ' ', '') || COALESCE(substr(p."Имя", 1, 1) || '.', '') || COALESCE(substr(p."Отчество", 1, 1)  || '.', '' ) "Название",
  42.             sv."Пользователь"
  43.          FROM "СвязиПользователя" sv
  44.             INNER JOIN "ЧастноеЛицо" p ON sv."ЧастноеЛицо" = p."@Лицо"
  45.          WHERE
  46.             sv."ЧастноеЛицо" IS NOT NULL AND
  47.             sv."УправленческаяСтруктура" AND
  48.             sv."$Черновик" IS NULL
  49.             AND EXISTS (
  50.                SELECT NULL
  51.                FROM dept d
  52.                WHERE d."Лицо" = sv."СтруктураПредприятия"
  53.             )
  54.       ),
  55.  
  56. -- Сотрудники и отделы
  57.       person AS (
  58.          SELECT
  59.             "Лицо",
  60.             "Раздел",
  61.             "Название",
  62.             "Раздел@",
  63.             NULL "Пользователь"
  64.          FROM dept
  65.  
  66.          UNION ALL
  67.  
  68.          SELECT
  69.             "Лицо",
  70.             "СтруктураПредприятия" "Раздел",
  71.             "Название",
  72.             FALSE "Раздел@",
  73.             "Пользователь"
  74.          FROM deptUsers
  75.       ),
  76.  
  77. personFiltered AS (SELECT p."Лицо"
  78.                                 , p."Раздел"
  79.                              FROM person p
  80.                             WHERE p."Раздел@" IS TRUE
  81.                             UNION ALL
  82.                            SELECT p."Лицо"
  83.                                 , p."Раздел"
  84.                              FROM person p
  85.                             WHERE p."Раздел@" IS FALSE
  86.                               AND EXISTS (SELECT NULL
  87.                                             FROM person p1
  88.                                            WHERE p1."Лицо" = p."Раздел")
  89.                             UNION ALL
  90.                            SELECT p."Лицо"
  91.                                 , p."Раздел"
  92.                              FROM person p
  93.                             WHERE p."Раздел@" IS FALSE
  94.                               AND p."Раздел"  IS NULL)
  95.  
  96. SELECT t."Регламент"
  97.                                , t."БезКонтактов"
  98.                                , t."ВРаботе"
  99.                                , t."ЗавершеноОтрицательно"
  100.                                , t."ЗавершеноПоложительно"
  101.                             FROM "ТемаСостояние" t
  102.                            INNER JOIN personFiltered p
  103.                                    ON p."Лицо" = t."Лицо"
Advertisement
Add Comment
Please, Sign In to add comment