2011-12-03 181 views
0
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 

使用多个计数这个查询将返回:在SQL Server 2005

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 

现在我想在项目1至数节数模名称和no.of.screen名。即我想要查询返回

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

回答

2

这绝对有可能返回多个计数。

换句话说,如下查询可以修改:根据您的示例数据

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屏幕的计数。