PL/SQL-Как реализовать несколько операторов подсчета в одном запросе, когда таблицы и условия все разные
Я работаю над инструментом Open Text Content Server, который использует базу данных PL/SQL. То, что я пытаюсь сделать, - это получить данные подсчета через 6 разных запросов, каждый из которых имеет разные условия и разные таблицы. Я пытался объединить все эти 6 запросов, но не повезло. Ниже перечислены эти 6 запросов:
Документы, созданные за месяц:
select count (dataid) from Dtree where
Createdate >= %1 and createdate <= %2 and subtype = 144
Общее количество пользователей:
select count(a.id) from Kuaf a, kuaf b where
a.deleted =0 and a.type =0 and b.id = a.groupid
Количество уникальных пользователей, зарегистрировавшихся за месяц (количество):
Select count (distinct (performerID))
from dauditnew where auditid=23 and auditdate >= %1 and auditdate <= %2
Пользователи, созданные за месяц (кол-во):
Select Count(dataid) FROM DAUDITNEW where AUDITID = 1
AND AUDITSTR LIKE 'Create' and subtype=142 AND
auditdate >= %1 and auditdate <= %2
Удаленные пользователи (количество):
SELECT count(a.userid) from dauditnew a WHERE
a.auditstr = 'Delete' AND
a.AuditDate >= %1 AND
a.AuditDate <= %2 AND
a.UserID in (Select ID from KUAF where Deleted = 1 and Type=0)
Инициированные рабочие процессы:
Select count(*) from Wworkaudit WWA where WWA.workaudit_status=1 AND
WWA.workaudit_date >= %1 and WWA.workaudit_date <= %2
Здесь%1,%2 обозначают пользовательский ввод. Поскольку все эти 6 запросов имеют совершенно разные условия, мне кажется сложной задачей их объединить. Пожалуйста, помогите мне.
Благодарю вас.
2 ответа
SELECT (
select count (dataid)
from Dtree
where Createdate BETWEEN :start_date and :end_date
and subtype = 144
) AS Docs_Per_Month,
(
select count(a.id)
from Kuaf a INNER JOIN kuaf b ON (b.id = a.groupid)
where a.deleted = 0
and a.type = 0
) AS Total_No_of_Users,
(
Select count( distinct performerID )
from dauditnew
where auditid = 23
and auditdate BETWEEN :start_date and :end_date
) AS Unique_Users_in_Month,
(
Select Count(dataid)
FROM DAUDITNEW
where AUDITID = 1
AND AUDITSTR = 'Create'
and subtype = 142
AND auditdate BETWEEN :start_date and :end_date
) AS Users_Created_in_Month,
(
SELECT count(a.userid)
from dauditnew a
WHERE a.auditstr = 'Delete'
AND a.auditdate BETWEEN :start_date and :end_date
AND a.UserID in (Select ID from KUAF where Deleted = 1 and Type=0)
) AS Users_Deleted,
(
Select count(*)
from Wworkaudit
where workaudit_status = 1
AND workaudit_date BETWEEN :start_date and :end_date
) AS Workflows_Initiated
FROM DUAL;
Используйте оператор UNION ALL
Ex. выберите количество (ось) из a... где... UNION ALL выберите количество (bz) из b... где... UNION ALL выберите количество (cy) из c... где... и т. д.
Примечание: вы должны использовать UNION ALL, потому что если вы используете обычный UNION, дублированные результаты не будут отображаться