2016-06-24 7 views
1

Я работаю над инструментом Open Text Content Server, который использует базу данных PL/SQL. То, что я пытаюсь сделать, - это получить данные счета через 6 разных запросов, все из которых имеют разные условия и разные таблицы. Я пытался объединить все эти 6 запросов, но не повезло. Ниже эти 6 запросов в списке:PL/SQL-Как реализовать несколько операторов подсчета в одном запросе, когда таблицы и условия все разные

документы, созданные в месяц:

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 

Уникальные пользователи, вошедшие в месяц (Count):

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 

Пользователи Удаляются (Count):

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

Thank you.

+1

Уточнитните «объединить их.» Каким должен быть результат? Показывать шесть отсчетов по отдельным строкам с описанием их идентификации? Или показать их в шести столбцах с именами описательных столбцов? Или что? – mathguy

+0

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

Спасибо MT0 ... вы просто решили действительно большую головную боль для меня .. Большое спасибо –

+0

Привет MT0. Будет ли возможность извлекать эти данные в столбцах, а не в строках? –

+0

Возьмите каждый из запросов, а затем соедините их с помощью 'UNION ALL' что-то вроде этого' SELECT 'Docs_per_month' AS name, count (dataid) AS frequency FROM dtree ... UNION ALL SELECT 'Total_No_Of_Users', COUNT (a.id) FROM Kauf a ... UNION ALL ... ' – MT0

0

Инструкция UNION ALL

Ex. select count (ax) from a ... UNION ALL select count (bz) from b ... where ... UNION ALL select count (cy) from c ... where .. . и т.д.

Примечание: вы должны использовать UNION ALL, потому что если вы используете регулярные UNION, дублируют результаты не будут показаны