Использование count и union вместе в SQL-запросе

У меня есть два запроса SQL

select count ( distinct w.processno ) AS "Number of Processes", y.userid from upmfolder f, upmperson p, w2process w, w2processcheck y where f.personid = p.personid and f.folderid = w.keynumb and w.Processno = y.processid and w.keyobject ='UPMFolder' group by 2

и еще один аналогичный:

select count ( distinct w.processno ) AS "Number of Processes", y.userid from upmfolder f, upmperson p, w2process w, w2processcheck y where f.personid = p.personid and f.payrollmemberid = w.keynumb and w.keyobject = 'UPMPayrollmember' and w.Processno = y.processid group by 2

Как мне объединить их в один запрос? Таким образом, счет и группа будут работать правильно. Я пытался с union all, однако это не сработало. Что мне нужно сделать?


person user2416927    schedule 24.05.2013    source источник
comment
разве это не зависит от того, что вы хотите считать в целом? Я имею в виду, как бы вы хотели обрабатывать процессы, удовлетворяющие обоим запросам? Один раз засчитали? дважды?   -  person Sagi Mann    schedule 24.05.2013
comment
я считаю только один раз   -  person user2416927    schedule 24.05.2013


Ответы (1)


Вы можете сделать это с помощью условной агрегации. Для count(distinct) вам нужно указать значение NULL:

select y.userid,
       count(distinct case when w.keyobject ='UPMFolder' then w.processno end) as NumFolder, 
       count(distinct case when w.keyobject ='UPMPayrollMember' then w.processno end) as NumPayrollMember
from upmfolder f, upmperson p, w2process w, w2processcheck y
where f.personid = p.personid and
      f.folderid = w.keynumb and
      w.Processno = y.processid
group by y.userid

Примечание. Вам также следует изучить современный синтаксис join. Я не изменил запрос, но условия соединения действительно должны быть в предложении on, а не в предложении where.

person Gordon Linoff    schedule 24.05.2013