我有一个包含 2 个人员列和 3 种状态类型的表。我如何计算两列不同的员工的所有状态。谢谢。 我的桌子
工作人员1 | 工作人员2 | 状态1 | 状态2 | 状态3 |
---|---|---|---|---|
约翰 | 约瑟夫 | 活跃 | 已关闭 | |
凯文 | 妮可 | 不适用 | 活跃 | 已关闭 |
妮可 | 凯文 | 已关闭 | 活跃 |
结果:
工作人员 | 活跃 | 已关闭 | 不适用 |
---|---|---|---|
约翰 | 1 | 1 | 0 |
凯文 | 2 | 2 | 1 |
妮可 | 2 | 2 | 1 |
约瑟夫 | 1 | 1 | 0 |
我尝试跟随,但它从来没有区分过工作人员
SELECT DISTINCT
CASE WHEN staff1 = staff2 THEN staff1
WHEN staff1 <> staff2 THEN staff1
WHEN staff2 <> staff1 THEN staff2
ELSE staff2 AS staffall,
SUM(CASE WHEN status1 = 'ACTIVE' THEN 1 ELSE 0)
SUM(CASE WHEN status1 = 'CLOSED' THEN 1 ELSE 0)
SUM(CASE WHEN status1 = 'NA' THEN 1 ELSE 0)
FROM Table
GROUP BY staff1, staff2
实现此目的的一种方法是首先在 CTE 中创建一组不同的员工,然后将其加入到您的表中:
with StaffDistinct(Staff) as (
select distinct staff1
from StaffStatus
union
select distinct staff2
from StaffStatus
)
select sd.Staff,
sum(case when Status1='ACTIVE' or Status2='ACTIVE' or Status3='ACTIVE' then 1 end) as Active,
sum(case when Status1='CLOSED' or Status2='CLOSED' or Status3='CLOSED' then 1 end) as CLOSED,
sum(case when Status1='NA' or Status2='NA' or Status3='NA' then 1 end) as NA
from StaffDistinct sd
join StaffStatus ss on sd.Staff = ss.Staff1 or sd.Staff = ss.Staff2
group by sd.staff;