Я выполняю этот отдельный запрос в моей среде создания отчетов программного обеспечения базы данных, и он работает хорошо.Однако я хочу иметь возможность взять этот запрос и вычесть его из того же запроса с table2.actionid, измененным на другое значение.
Контекст: 15 и 16 соответствуют различным идентификаторам действий пользователя.В этом случае 16 соответствует созданию файла, а 15 соответствует удалению файла.В моем случае, для нахождения правильного выходного значения мне нужны выходные данные этого запроса для действия пользователя 16 МИНУС выходные данные этого же запроса для действия пользователя 15.
Также игнорируем «date> =% 1», так какотдельный раздел в моей среде, где можно ввести эту дату.
Вот мои таблицы и соответствующие им столбцы для быстрого ознакомления:
Main Table (id)
Table 1 (defid, id, asubtype)
Table 2 (id, actionid, bsubtype, performerid)
Table 3 (userid)
Вот мой индивидуальный запрос:
SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id
Мой "Промежуточный итог", когда таблица2.actionid = 16 равно 2. Мое «общее количество», когда table2.actionid = 15 равно 1.
Создано два файла, один удален.Мой вывод должен быть все файлы, которые были созданы, но не удалены.Таким образом, логически вывод минус должен быть 1?Правильно?
Однако, когда я использовал оператор Oracle MINUS (https://www.techonthenet.com/oracle/minus.php),, мой промежуточный итог все еще равен 2.
Что я делаю не так? Должен ли я использовать какой-то подвыбор вместо«У меня было слишком много кофеина? Я что-то упускаю?» Любой ввод / совет был бы очень полезен:)
Это минусовый запрос:
SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id
MINUS
SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 15
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id