Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于sql server中的另一个表计算行数_Sql_Sql Server - Fatal编程技术网

基于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
和counting
pID
将查询包装成一个又一个select分组,就可以得到您想要的结果。