如何根据SQL中的另一列类型计算行数

如何根据SQL中的另一列类型计算行数,sql,Sql,有没有办法根据SQL中的另一列类型计算行数 数据库: Department | Resource Type | People =================================== HR | manager | john | staff | jason | staff | smith IT | manager | wendy |

有没有办法根据SQL中的另一列类型计算行数

数据库:

Department | Resource Type | People
===================================
HR         | manager       | john
           | staff         | jason
           | staff         | smith
IT         | manager       | wendy
           | staff         | emma
           | staff         | jay
           | staff         | cody
HR2        | manager       | john
           | staff         | terry
           | staff         | mike
           | staff         | fry
预期产出:

john, 5 employees
wendy, 3 employees

谢谢

根据您的数据样本,请尝试:

SELECT S.Department,
       (SELECT TOP 1 SUB.People FROM dbo.Staff SUB
        WHERE SUB.Department = S.Department 
        AND SUB.ResourceType = 'manager') as Manager,
       COUNT(*) as Employees FROM dbo.Staff S
   WHERE S.ResourceType = 'staff'
   GROUP BY S.Department
我在这里假设,
部门
将包含每个记录的值,而不仅仅是经理的值,每个部门至少有一个经理


您可以通过创建两个临时表来完成此操作:

select People, sum(quantity) from(
select [ResourceType], People,quantity
from tablename
right join
(
select Count(Department) quantity, Department
from tablename
group by [ResourceType], Department
having [ResourceType] = 'staff') tmp1 on tablename.Department = tmp1.Department
where [ResourceType] = 'Manager'
) tmp2 
group by People

实际上,使用一个连接很容易完成。这还涉及到为两个不同部门的经理工作的员工,以及有多个经理的部门

SELECT t1.People as ManagerName, 
    count(distinct t2.People) 
FROM @Staff t1 
LEFT JOIN @Staff t2 ON t2.Department = t1.department 
    AND t2.ResourceType = 'staff' WHERE t1.ResourceType = 'manager'
GROUP BY t1.People

与其他答案一样,我还必须假设所有行在
Department
列中都有一个值。否则,就没有办法按你的要求去做

此外,您的示例数据似乎暗示每个部门只有一名经理。所以我也会做出这样的假设

执行此操作的简单查询如下:

select mgr.people || ', ' ||
       count(staff.people) || ' employees' -- the string concatenation on these lines may vary depending on your database.
  from TableName mgr
  left join TableName staff
    on staff.Department = mgr.Department
   and staff.ResourceType = 'staff'
 where mgr.ResourceType = 'manager'
 group by mgr.people

在您的数据中,哪些列值建立了经理和员工之间的关系?我没有看到。员工的
department
列真的是
null
吗?department列中缺少值。您使用的是哪种DBMS?博士后?神谕