SQL查询问题:显示两个表中所有人员姓名和计数

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

我有两个表,

Job_support
Job_interaction
,都包含与各个工作人员相关的数据。我正在尝试创建一个查询,生成一个报告,其中包含两个表中每个工作人员的总计数。我想确保所有员工姓名都包含在结果中,即使其中一张表中没有相应的记录。

以下是示例表:

表 1 - Job_support:

CNT     Staff
1       Tom Smith
2       N/A

表 2 - Job_interaction:

Staff       CNT
Tom Smith   1
Alice Adams 2

预期输出应如下所示:

Staff         Job_support_cnt   Job_interaction_cnt
Tom Smith     1                 3
Alice Adams   0                 2
Amber         0                 0
Unassigned    2                 N/A

我尝试使用以下查询:

SELECT
    Job_interaction.staff,
    Job_interaction.cnt AS Job_interaction_cnt,
    Job_support_cnt.cnt AS Job_support_cnt
FROM
    Job_interaction
JOIN
    Job_support ON Job_support.staff = Job_interaction.staff;

但是,输出仅包括两个表中具有匹配记录的工作人员,如下所示:

Staff         Job_support_cnt   Job_interaction_cnt
Tom Smith     1                 1

如何修改查询以确保所有员工姓名都显示在第一列中,并且从两个表中填充相应的计数,并用零或“N/A”表示缺失值?我应该使用特定的函数或连接来实现此结果吗?


我还尝试了以下查询 -

SELECT
    COALESCE(Job_interaction.staff, Job_support.staff, 'Unassigned') AS Staff,
    COALESCE(Job_support.cnt, 0) AS Job_support_cnt,
    COALESCE(Job_interaction.cnt, 0) AS Job_interaction_cnt
FROM
    (SELECT DISTINCT staff FROM Job_support
     UNION
     SELECT DISTINCT staff FROM Job_interaction) StaffList
LEFT JOIN Job_support ON StaffList.staff = Job_support.staff
LEFT JOIN Job_interaction ON StaffList.staff = Job_interaction.staff
sql oracle oracle-sqldeveloper
1个回答
0
投票

基于的东西:

SELECT
    Job_interaction.staff,
    COALESCE(Job_interaction.cnt, 0) AS Job_interaction_cnt,
    COALESCE(Job_support_cnt.cnt, 0) AS Job_support_cnt
FROM
    Job_interaction
FULL OUTER JOIN
    Job_support ON Job_support.staff = Job_interaction.staff;

请发布您的表的DDL

© www.soinside.com 2019 - 2024. All rights reserved.