Advertisement
Deevpress

Pivot pl/sql 2

Jul 9th, 2024
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.90 KB | None | 0 0
  1. SELECT
  2.      "Accounts"."FullName"
  3.     ,"Accounts"."ShortName"
  4.     ,"Accounts"."INN"
  5.     ,"Accounts"."OGRN"
  6.     ,"Accounts"."BIC"
  7.     ,"Accounts"."RegNum"
  8.     ,"Accounts"."Code"
  9.     ,"Messages"."Id"
  10.     ,m."RegistrationNumber" AS "Регистрационный номер"
  11.     ,"DictCatalogTasks"."Code" AS "Код задачи"
  12.     ,"DictCatalogTasks"."Name" AS "Наименование задачи",
  13.     TO_CHAR(COALESCE("1","10")+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Отправлено",
  14.     TO_CHAR("3"+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Ошибка",
  15.     TO_CHAR("2"+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Загружено",
  16.     TO_CHAR("4"+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Принято в обработку",
  17.     TO_CHAR("5"+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Зарегистрировано",
  18.     TO_CHAR("6"+INTERVAL '3 hour','yyyy-mm-dd hh24:mi:ss') AS "Отклонено"
  19.     ,CASE WHEN
  20.       date_part('hour',
  21.         (SELECT MAX("DateReceipt")
  22.          FROM dbo."MessageReceipts" AS mr
  23.          WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('DCF0CE75-E3DA-4573-9DBF-D36C7B50F096', '782651DF-6FB7-48BC-85F0-C0420DC1A76C'))-
  24.         (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr
  25.                             WHERE mr."MessageId" = m."Id"
  26.                               AND mr."StatusEcId" IN ('75B8BD15-B52E-4827-8CFB-38C479C6C537'))) *60+
  27.         date_part('minute',
  28.         (SELECT MAX("DateReceipt")
  29.          FROM dbo."MessageReceipts" AS mr
  30.          WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('DCF0CE75-E3DA-4573-9DBF-D36C7B50F096', '782651DF-6FB7-48BC-85F0-C0420DC1A76C'))-
  31.         (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr
  32.                             WHERE mr."MessageId" = m."Id"
  33.                               AND mr."StatusEcId" IN ('75B8BD15-B52E-4827-8CFB-38C479C6C537'))) > 120
  34.     THEN 'Более двух часов (Задержка)'
  35.      WHEN date_part('hour',
  36.                     (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('DCF0CE75-E3DA-4573-9DBF-D36C7B50F096', '782651DF-6FB7-48BC-85F0-C0420DC1A76C')) -
  37.                     (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('75B8BD15-B52E-4827-8CFB-38C479C6C537'))) * 60 +
  38.           date_part('minute',
  39.                     (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('DCF0CE75-E3DA-4573-9DBF-D36C7B50F096', '782651DF-6FB7-48BC-85F0-C0420DC1A76C')) -
  40.                     (SELECT MAX("DateReceipt") FROM dbo."MessageReceipts" AS mr WHERE mr."MessageId" = m."Id" AND mr."StatusEcId" IN ('75B8BD15-B52E-4827-8CFB-38C479C6C537'))) <= 120
  41.     THEN 'Менее двух часов (Штатно)'
  42.     END "Получение последней ответной квитанции"
  43.     ,(SELECT COUNT("StatusEcId") FROM dbo."MessageReceipts" AS mr WHERE m."Id" = mr."MessageId" AND mr."StatusEcId" = 'DCF0CE75-E3DA-4573-9DBF-D36C7B50F096') AS "Кол-во квитанций Зарегистрировано"
  44.     ,(SELECT COUNT("StatusEcId") FROM dbo."MessageReceipts" AS mr WHERE m."Id" = mr."MessageId" AND mr."StatusEcId" = '782651DF-6FB7-48BC-85F0-C0420DC1A76C') AS "Кол-во квитанций Отклонено"
  45.     ,CASE WHEN "5" IS NULL AND "6" IS NULL THEN 'нет квитанций'
  46.           WHEN "5" IS NOT NULL OR "6" IS NOT NULL THEN 'есть квитанции'
  47.     END "rezultat"
  48.  
  49. FROM
  50.  
  51.   (SELECT * FROM  crosstab(
  52.        'SELECT r."MessageId", coalesce(s."Value",r."ReceiptStatus") ReceiptStatus, max(r."DateReceipt") "DateReceipt"
  53.        FROM dbo."MessageReceipts" r
  54.        left join dbo."StatusEc" s on s."Id" = r."StatusEcId"
  55.       group by r."MessageId", coalesce(s."Value",r."ReceiptStatus")',
  56.       $$SELECT unnest('{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 99}'::int[])$$)
  57.  AS SourceTable ("MessageId" uuid, "0" TIMESTAMP, "1" TIMESTAMP,"2" TIMESTAMP,"3" TIMESTAMP,"4" TIMESTAMP,"5" TIMESTAMP,"6" TIMESTAMP,
  58.                  "7" TIMESTAMP,"8" TIMESTAMP,"9" TIMESTAMP,"10" TIMESTAMP,"18" TIMESTAMP,"99" TIMESTAMP)
  59.   )  "PivotTable"
  60. JOIN (
  61.     SELECT m.*, COALESCE(s."Value",m."Status") "CombinedStatus"
  62.     FROM dbo."Messages" m
  63.     left join dbo."StatusEc" s ON s."Id" = m."StatusEcId"
  64. ) AS m ON "PivotTable"."MessageId" = m."Id"
  65. JOIN dbo."Messages" ON "PivotTable"."MessageId" = "Messages"."Id"
  66. INNER JOIN dbo."MessageData" ON "Messages"."Id" = "MessageData"."MessageId"
  67. JOIN dbo."Accounts" ON dbo."Messages"."OwnerId" = "Accounts"."Id"
  68. JOIN dbo."DictCatalogTasks" ON dbo."Messages"."CatalogTaskId" = dbo."DictCatalogTasks"."Id"
  69. WHERE dbo."DictCatalogTasks"."Id" IN
  70. ('7867C287-08B4-466A-8E5A-2B19CCF4EDE1', '1CEDFA1C-AEC4-4A00-BBD5-599DC054A14D')
  71. AND (dbo."Messages"."CreationDate" BETWEEN '2024-07-07 21:00:00.0000000' AND '2024-07-08 21:00:00.0000000')
  72. --and (dbo."Messages"."CreationDate" between '2024-02-20 21:00:00.0000000' and '2024-02-21 21:00:00.0000000')
  73. AND (m."CombinedStatus") <> 0 AND (m."CombinedStatus") <> 8 AND (m."CombinedStatus") <> 9
  74. ORDER BY dbo."Messages"."CreationDate" DESC;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement