Как найти сумму для столбца count (*), которая получена из другого запроса результата объединения

#sql #oracle

#sql #Oracle

Вопрос:

Я работаю в некотором запросе, который должен выдавать сумму для столбца count (*) ,

мой запрос :

 SELECT sap_sys_id,
  stock_id,
  form,
  COUNT(*)
FROM tbl_doc
WHERE stock_id=
  (SELECT Q1_stock_id-1 FROM tbl_id_virtualpool
  )
AND spool_name NOT LIKE '%MXC%'
GROUP BY sap_sys_id,
  stock_id,
  form
UNION ALL
SELECT sap_sys_id,
  stock_id,
  form,
  COUNT(*)
FROM tbl_document_log
WHERE stock_id=
  (SELECT Q2_stock_id-1 FROM tbl_id_virtualpool
  )
AND spool_name NOT LIKE '%MXC%'
GROUP BY sap_sys_id,
  stock_id,
  form
ORDER BY form;
  

результат, который я имею :

 SAP 111111  ZEBFSF_FICO1_sys     6865
SAP 222222  ZEBFSF_FICO2_sys     836
SAP 222222  ZEBFSF_FICO3_sys     83646
SAP 333333  ZEBFSF_FICO4_sys     326
SAP 222222  ZEBFSF_FICO5_sys     19
  

в то время как желаемый результат :

 SAP 111111  ZEBFSF_FICO1_sys     6865
SAP 222222  ZEBFSF_FICO2_sys     836
SAP 222222  ZEBFSF_FICO3_sys     83646
SAP 333333  ZEBFSF_FICO4_sys     326
SAP 222222  ZEBFSF_FICO5_sys     19
                Total          91 692
  

любые идеи, как это можно сделать, заранее спасибо

Комментарии:

1. насколько я знаю, вы не можете получить две разные структуры с одним и тем же запросом, это означает, что вы не можете получить эту структуру SAP 111111 ZEBFSF_FICO1_sys 6865 и эту Total 91 692 в том же результате, поможет ли новый столбец с этой суммой? SAP 111111 ZEBFSF_FICO1_sys 6865 91,692

2. также это хорошо, а также, если для меня будет хорошо писать как null, null, total,91 692 или в другом столбце

3. вероятно, вам следует использовать аналитические функции, docs.oracle.com/cd/E11882_01/server.112/e41084/… Я попробую написать пример

4. Волшебный человек, которому ты очень благодарен, а также ждешь примера 🙂

5. @drali, я бы предложил сверху изучить функции группировки в oracle, что делает такие операции группировки гибкими для обработки.

Ответ №1:

Используя аналитическую функцию, возможно, вы могли бы добавить новый столбец с желаемым sum

 SELECT sap_sys_id,stock_id,form, COUNT, sum(count) OVER (  ) as sum 
from (
SELECT sap_sys_id,
       stock_id,
       form,
       COUNT(*) as count
FROM tbl_doc
WHERE stock_id =
      (SELECT Q1_stock_id - 1
       FROM tbl_id_virtualpool
      )
  AND spool_name NOT LIKE '%MXC%'
GROUP BY sap_sys_id,
         stock_id,
         form
UNION ALL
SELECT sap_sys_id,
       stock_id,
       form,
       COUNT(*) as count
FROM tbl_document_log
WHERE stock_id =
      (SELECT Q2_stock_id - 1
       FROM tbl_id_virtualpool
      )
  AND spool_name NOT LIKE '%MXC%'
GROUP BY sap_sys_id,
         stock_id,
         form
ORDER BY form);