日期:2014-05-17  浏览次数:20539 次

求一个查询的不同写法 。。
两张表 表结构如下

表A(公司表) 
cid companyname
 1  百度
 2  新浪

表B (员工表)
id  cid  name
 1    1    张三
 2    2    李四
 3    1    王五
 4    2    马六


我现在想要这样一个结构

 cid companyname  personCount
   1     百度          2
   2     新浪          2


我写的一个查询如下
select cid,companyname,(select count(1) from b where b.cid=A.cid) personcount from A


我现在想知道这种需求共有几种写法  每种写法的效率如何
那种最好



 我实际的需求是 有表A  另外有十张表都引用表A的id 
 然后查出这样一个结构

 表AID  表1总数 表2总数 。。。。
    1     20      30    。。。
    2     200     3000  。。。

------解决方案--------------------

select A.cid,companyname,COUNT([name]) personcount from A INNER JOIN B ON A.cid=B.cid
------解决方案--------------------
select a.cid,a.companyname,b.personcount from A inner join
(select cid,count(1)as personcount from B group by cid)b on b.cid=A.cid
------解决方案--------------------
1楼忘了GROUP BY

把统计放进CTE里面会不会更清晰些呢,然后在表连接
------解决方案--------------------




create table T_A
(
Cid int,
CompanyName varchar (30)
)

create Table T_B
(
id int ,
Cid int,
Name varchar(50)
)


insert into T_A values ('1','百度')
insert into T_A values ('2','新浪')

insert into T_B values ('1','1','张三')
insert into T_B values ('2','2','李四')
insert into T_B values ('3','1','王五')
insert into T_B values ('4','2','赵六')


select distinct A.Cid,A.CompanyName,
COUNT(B.id) over (partition by A.Cid) 
from T_A A inner join T_B B on A.Cid=B.Cid

select A.*,B.number 
from T_A A,
(select Cid,COUNT(1) as number from T_B group by Cid ) B
where A.Cid=B.Cid


------解决方案--------------------
USE test
GO

-->生成表tb_Master

if object_id('tb_Master') is not null 
drop table [tb_Master]
Go
Create table [tb_Master](id smallint,[companyname] nvarchar(2))
Insert into [tb_Master]
Select 1,N'百度'
Union all Select 2,N'新浪'
Go


-->生成表tb_s1

if object_id('tb_s1') is not null