基于sql server中的另一个表计算行数
我有两张桌子——一张给员工,另一张给他们的孩子 我如何根据孩子的数量对人们进行分组 职员表基于sql server中的另一个表计算行数,sql,sql-server,Sql,Sql Server,我有两张桌子——一张给员工,另一张给他们的孩子 我如何根据孩子的数量对人们进行分组 职员表 pID|name|family|ETC| ---- |-------- |-------|-------| 123 |abc|ddd | 134 | f | 124 |dfv |eee | 900 | d | 126 |rgt |wwww|750|m| 子表 pID|name|family|ETC| ---- |-------- |------
pID|name|family|ETC|
---- |-------- |-------|-------|
123 |abc|ddd | 134 | f |
124 |dfv |eee | 900 | d |
126 |rgt |wwww|750|m|
子表
pID|name|family|ETC|
---- |-------- |-------|-------|
123 |mah|ddd |2005/06/09|son |
123 |dar|ddd |2013/11/01|girl|
123 |sia|ddd |2003/01/01|girl|
126 |naz|wwww|2007/25/01|girl|
预期表格
pID|no|
----- |- |
123 |3|
124 |0|
126 |1|
从
staff
加入到children
并按pID
分组将为您完成以下工作:
select
S.pID,
count(C.name) as no
from staff as S
left outer join childern as C on C.pID = S.pID
group by S.pID
试试这个
select S.pID,
(select isnull(COUNT(*),0) from children C where C.pID=S.pID)
from Staff S
用实际的表名替换[children]和[staff]
SELECT staff.pid,count(*) FROM staff,children WHERE staff.pid=children.pid GROUP BY staff.pid;
此查询将为您提供结果输出。如果您想要所有PID的结果(即使它们没有子项),请使用:
select
staff.pID,count(children.name) as count
from staff
left outer join childern on childern.pID = staff.pID
group by S.pID
select
staff.pID,count(children.name) as count
from staff
inner join childern on childern.pID = staff.pID
group by S.pID
(与安迪·科尔尼耶夫的回答相同)
但是,如果您只需要子项计数(大于0的子项),请使用:
select
staff.pID,count(children.name) as count
from staff
left outer join childern on childern.pID = staff.pID
group by S.pID
select
staff.pID,count(children.name) as count
from staff
inner join childern on childern.pID = staff.pID
group by S.pID
希望这有帮助。您尝试过什么吗?今天的提示:切换到现代的显式连接语法!更易于编写(无错误),更易于读取和维护,并且在需要时更易于转换为外部联接。可以根据子级计数获取工作人员的数量吗?比如0个孩子50个人,1个孩子60个人,等等?@jaleel为什么不呢?只需通过
no
和countingpID
将查询包装成一个又一个select分组,就可以得到您想要的结果。