#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);