如何根据SQL中的另一列类型计算行数
有没有办法根据SQL中的另一列类型计算行数 数据库:如何根据SQL中的另一列类型计算行数,sql,Sql,有没有办法根据SQL中的另一列类型计算行数 数据库: Department | Resource Type | People =================================== HR | manager | john | staff | jason | staff | smith IT | manager | wendy |
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?博士后?神谕