Моя проблема
У меня есть два запроса, которые имеют одинаковый выбор и критерии, но имеют другое утверждение where. Каждый запрос подсчитывает количество «действий». Первый запрос подсчитывает все созданные файлы, а второй - все удаленные файлы. Чтобы получить обновленное количество файлов, мне нужно объединить их, а затем вычесть количество результирующих наборов для удаленных из числа результирующих наборов для созданных.
Вот мои два запроса. Они практически одинаковы, за исключением того, что для одного из них table2.auditid = 15 для созданного, а для другого table2.auditid = 14 для удаленного.
Создано:
SELECT decode(table1.id,
2984, 'Category 1',
3298, 'Category 2',
2390, 'Category 3',
4039, 'Category 4',
5048, 'Category 5',
'Unknown') "Category",
COUNT (table1.id) AS "Files Created"
FROM table1
JOIN
maintable ON maintable.dataid = table1.id
JOIN
table2 ON table2.dataid = maintable.id
JOIN
table3 ON table3.id = table2.userid
WHERE table2.auditid = 15
AND auditdate >= %1
AND table2.subtype = 0
AND table1.subtype = -18
GROUP BY table1.id
Удалено:
SELECT decode(table1.id,
2984, 'Category 1',
3298, 'Category 2',
2390, 'Category 3',
4039, 'Category 4',
5048, 'Category 5',
'Unknown') "Category",
COUNT (table1.id) AS "Files Created"
FROM table1
JOIN
maintable ON maintable.dataid = table1.id
JOIN
table2 ON table2.dataid = maintable.id
JOIN
table3 ON table3.id = table2.userid
WHERE table2.auditid = 14
AND auditdate >= %1
AND table2.subtype = 0
AND table1.subtype = -18
GROUP BY table1.id
Обратите внимание, что эти запросы выполняются самостоятельно.
Что я пробовал
- Я не могу использовать оператор минус, так как он не работает для наборов результатов (я забыл об этом и задавал этот вопрос ранее)
- Я пытался вложить эти два запроса в подзапросы и использовать объединение и т. Д., Но не смог заставить его работать.
- Я пробовал метод, описанный в ( SQL сумма 2 другой столбец с другим условием, чем вычитание и добавить ). Это дало мне ошибку ORA-00904 Неверный идентификатор строки "table1.id.
Вот код, который я адаптировал:
select decode(table1.id,
2984, 'Category 1',
3298, 'Category 2',
2390, 'Category 3',
4039, 'Category 4',
5048, 'Category 5',
'Unknown') "Category",
(filescreated.CNT - filesdeleted.CNT) as "Final Count",
from (
SELECT table1.id,
COUNT(table1.id) as CNT
FROM table1
JOIN
maintable ON maintable.dataid = table1.id
JOIN
table2 ON table2.dataid = maintable.id
JOIN
table3 ON table3.id = table2.userid
WHERE table2.auditid = 15
AND auditdate >= %1
AND table2.subtype = 0
AND table1.subtype = -18
GROUP BY table1.id) filescreated,
(SELECT table1.id,
COUNT(llattrdata.defid) as CNT
FROM table1
JOIN
maintable ON maintable.dataid = table1.id
JOIN
table2 ON table2.dataid = maintable.id
JOIN
table3 ON table3.id = table2.userid
WHERE table2.auditid = 14
AND auditdate >= %1
AND table2.subtype = 0
AND table1.subtype = -18
GROUP BY table1.id) filesdeleted
ORDER BY table1.id
Кто-нибудь может дать некоторое представление?