Sql server 2005 在SQL Server 2005中使用多个计数
此查询将返回:Sql server 2005 在SQL Server 2005中使用多个计数,sql-server-2005,tsql,count,Sql Server 2005,Tsql,Count,此查询将返回: 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
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
现在我想计算project-1中mod name的数量和screen-name的数量。i、 我希望查询返回
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
返回多个计数绝对是可能的 换句话说,您的查询可以修改如下:
project-name no.of.mod no.of.screen
------------------------------------------------
Project-1 2 4
根据您的示例数据,我推断模块和屏幕之间存在一对多关系,因此您希望模块的计数不同
,但屏幕不需要相同的要求(因为一个屏幕似乎不会在给定模块中多次出现)如果不是这样,您还可以将distinct
添加到屏幕计数中
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