Oracle SQL: минус - PullRequest
       2

Oracle SQL: минус

0 голосов
/ 27 октября 2018

Я выполняю этот отдельный запрос в моей среде создания отчетов программного обеспечения базы данных, и он работает хорошо.Однако я хочу иметь возможность взять этот запрос и вычесть его из того же запроса с 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

1 Ответ

0 голосов
/ 27 октября 2018

Не совсем уверен, какого результата вы пытаетесь достичь, но MINUS - это операция set , то есть поиск записей в первом наборе результатов, которых нет во втором.Так что, если вы ищете оставшиеся COUNT s, вам нужно присоединиться к этим наборам результатов и выполнить вычитание по промежуточным суммам вместо MINUS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...