SQL Можете ли вы посчитать столбец и агрегировать по столбцу, а группу по дате? - PullRequest
0 голосов
/ 09 марта 2020

Я новичок в SQL и пытаюсь получить счет для вычисляемого поля. Обычно я использую GUI для его построения, но, поскольку я изучаю синтаксис, иногда кажется, что легче извлечь и обновить вручную. Поставлен вопрос о том, как получить счет для этого вычисляемого поля. Нужно получить общее количество по названию инструмента, а затем сгруппировать его по дате. Для этого сценария у нас есть около 20 инструментов, и мы хотели бы видеть, сколько событий в день на инструмент получает система.

Вот запрос, который выполняется.

SELECT DISTINCT
   COUNT(DISTINCT("REPORTER_D"."MC_TOOL")) AS "TOOL COUNT",
   "REPORTER_D"."MC_TOOL",
   CASE
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'ALARM%' THEN 'PATROL'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'DELL_EMC%' THEN 'DELL_EMC'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'Eye of the Storm%' THEN 'ENTUITY'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'NECTAR%' THEN 'NECTAR'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'NINTEX%' THEN 'NINTEX'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'oci_%' THEN 'OCI'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'OEM%' THEN 'OEM'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'OPSMVS%' THEN 'OPSMVS'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'PROXY_CONVERGED_%' THEN 'PROXY_CONVERGED'
      WHEN "REPORTER_D"."MC_TOOL" LIKE 'SCOM%' THEN 'SCOM'
      ELSE "REPORTER_D"."MC_TOOL"
   END AS "TOOL",
   "INFO_F"."DATE_RECEPTION",
   "INFO_F"."DATE_RECEPTION",
   "D"."REPEAT_COUNT",
   "D"."ITSM_INCIDENT_ID",
   "D"."MC_OWNER",
   "D"."MSG",
   "D"."MC_HOST",
   "Custom Event Slots"."_GROUP"
FROM "SLOTS_O"
INNER JOIN "D"
ON (
   "SLOTS_O"."SERVER_ID" = "D"."BPPM_SERVER_ID"
   AND "SLOTS_O"."MC_UEID" = "D"."MC_UEID"
)
INNER JOIN (
   select
    a.mc_ueid,
    a.bppm_server_id,
    a.slot_name as cust_pid_slotname,
    a.slot_value as cust_pid,
    b.slot_name as assigned_group_slotname,
    b.slot_value as assigned_group,
    c.slot_name as cust_assignmentkey_slotname,
    c.slot_value as cust_assignmentkey,
    d.slot_name as cust_slotname,
    d.slot_value as cust_mnemonic,
    e.slot_name as cust_type_slotname,
    e.slot_value as cust_type,
    f.slot_name as cust_ci_slotname,
    f.slot_value as cust_ci
from
    event_extended_slots_o a,
    event_extended_slots_o b,
    event_extended_slots_o c,
    event_extended_slots_o d,
    event_extended_slots_o e,
    event_extended_slots_o f
where (
    a.mc_ueid=b.mc_ueid and
    a.mc_ueid=c.mc_ueid and
    a.mc_ueid=d.mc_ueid and
    a.mc_ueid=e.mc_ueid and
    a.mc_ueid=f.mc_ueid and
    a.slot_name='cust_pid' and
    b.slot_name='assigned_group' and
    c.slot_name='cust_assignmentkey' and
    d.slot_name='cust_mnemonic' and
    e.slot_name='cust_type' and
    f.slot_name='cust_ci'
    )

) "Custom Event Slots"
ON (
   "Custom Event Slots"."MC_UEID" = "SLOTS_O"."MC_UEID"
)
INNER JOIN "INFO_F"
ON (
   "D"."MC_UEID" = "INFO_F"."MC_UEID"
   AND "D"."BPPM_SERVER_ID" = "INFO_F"."BPPM_SERVER_ID"
)
INNER JOIN "CLASS_D"
ON (
   "INFO_F"."BPPM_SERVER_ID" = "CLASS_D"."BPPM_SERVER_ID"
   AND "INFO_F"."EVENT_CLASS_KEY" = "CLASS_D"."EVENT_CLASS_KEY"
)
LEFT OUTER JOIN "REPORTER_D"

ON (
   "INFO_F"."BPPM_SERVER_ID" = "REPORTER_D"."BPPM_SERVER_ID"
   AND "INFO_F"."TOOL_KEY" = "REPORTER_D"."TOOL_KEY"
)
WHERE (
   "INFO_F"."DATE_RECEPTION" >= trunc(sysdate)-7 AND
       (
        "REPORTER_D"."MC_TOOL" LIKE 'ALARM%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'DELL_EMC%' OR 
        "REPORTER_D"."MC_TOOL" LIKE 'Eye of the Storm%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'NECTAR%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'NINTEX%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'oci_%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'OEM%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'OPSMVS%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'PROXY_CONVERGED_%' OR
        "REPORTER_D"."MC_TOOL" LIKE 'SCOM%' OR
      )
     )
GROUP BY 
   "D"."REPEAT_COUNT",
   "REPORTER_D"."MC_TOOL",
   "REPORTER_D"."MC_TOOL",
   "D"."ITSM_INCIDENT_ID",
   "INFO_F"."DATE_RECEPTION",
   "D"."MC_OWNER",
   "D"."MC_HOST",
   "Custom Event Slots"."BMCPS_ASSIGNED_GROUP",
   "D"."MSG"

ORDER BY
   COUNT(DISTINCT("REPORTER_D"."MC_TOOL")) DESC

I Я испробовал несколько вариантов подсчета, и это не дает мне того, что мне нужно, поэтому посмотрим, возможно ли это, и если да, то каков правильный синтаксис.

...