Использовать несколько счетчиков в SQL Server 2005 - PullRequest
0 голосов
/ 03 декабря 2011
select p.intprojectid, p.vcprojectname, md.intmoduleid, 
       md.vcmodulename, md.intscreensfunc, md.vcname 
from projects as p 
left join (select m.intprojectid, m.intmoduleid, m.vcmodulename, 
                  s.intscreensfunc, s.vcname 
           from modules as m 
           left join screens_func as s on m.intmoduleid = s.intmoduleid) md 
           on p.intprojectid = md.intprojectid

Этот запрос вернет:

no |project-name|mod-id|mod-name  |  screen-id   |  screen-name
----------------------------------------------------------------
2   Project-1     4      mod-1          11            scr1
2   Project-1     4      mod-1          12            scr2
2   Project-1     4      mod-1          13            scr3
2   Project-1     4      mod-1          14            scr4
2   Project-1     8     Module-2       NULL           NULL

Теперь я хочу посчитать no.of mod-name и no.of.screen-name в project-1.т.е. я хочу, чтобы запрос возвратил

project-name     no.of.mod          no.of.screen
------------------------------------------------
Project-1          2                    4

1 Ответ

2 голосов
/ 03 декабря 2011

Определенно можно вернуть несколько счетов.

Другими словами, ваш запрос может быть изменен следующим образом:

select p.vcprojectname, COUNT(DISTINCT md.intmoduleid) as no.of.mod, COUNT(md.intscreensfunc) as no.of.screen
from projects as p 
    left join (select m.intprojectid, m.intmoduleid, m.vcmodulename, s.intscreensfunc, s.vcname 
               from modules as m 
               left join screens_func as s 
                        on m.intmoduleid=s.intmoduleid)md 
           on p.intprojectid=md.intprojectid
GROUP BY p.vcprojectname

Основываясь на данных вашего примера, я сделал вывод, что между модулями и экранами будет отношение один-много, и поэтому вам нужно подсчитать distinct для модулей, но такое же требование не потребуется для экранов (так как Похоже, что один экран не появится несколько раз в данном модуле) Если это не так, вы также можете добавить distinct к количеству экранов.

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