带有摘要的不同 2 列

问题描述 投票:0回答:1

我有一个包含 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
sql sql-server distinct
1个回答
0
投票

实现此目的的一种方法是首先在 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;
© www.soinside.com 2019 - 2024. All rights reserved.