3

我有两张桌子。表 A 包含部门列表,共有 20 个。

看图片

在此处输入图像描述

表 B 包含表 A 中的每个部门至少 1 行,其中一些包含一些。

看图片

在此处输入图像描述

我想要的是从 A & B 创建的第三张表,它基本上列出了每个部门,然后是全职和兼职的人数。例如,如果在表 b 中找到一个部门,该部门只有全职或兼职的数字(例如部门 D),那么我希望该表显示 0(零)而不是将其留空。

看图片

在此处输入图像描述

有人可以就此提出建议吗?

编辑 如果其中一个部门没有例如“兼职”,这意味着他们的兼职员工人数通常为零。

4

3 回答 3

3

你想要一个PIVOT

select *
from (tableb) s
pivot (Max(staffno) for employee_class in ([Full Time],[Part Time])) p
于 2012-10-23T13:49:45.830 回答
0

试试这个:

select A.DEPTNAME, 
       sum(case when B.EMPLOYEE_CLASS='Full time' then B.STAFF_NO else 0) as FullTimeNo,
       sum(case when B.EMPLOYEE_CLASS='Part time' then B.STAFF_NO else 0) as PartTimeNo,
from TabA A
join TabB B on A.DEPTNAME=B.DEPTNAME
group by A.DEPTNAME
于 2012-10-23T13:49:41.807 回答
0
SELECT
  A.DEPTNAME,
  (SELECT COUNT(*) FROM TABLEA A2 INNER JOIN TABLEB B ON B.TableAID = A2.TableAID WHERE B.EMPLOYEE_CLASS = 'Full time' AND A2.TableAID = A.TableAID) FullTimeNo,
  (SELECT COUNT(*) FROM TABLEA A2 INNER JOIN TABLEB B ON B.TableAID = A2.TableAID WHERE B.EMPLOYEE_CLASS = 'Part time' AND A2.TableAID = A.TableAID) PartTimeNo
FROM
  TABLEA
于 2012-10-23T13:55:12.653 回答