我有两张桌子。表 A 包含部门列表,共有 20 个。
看图片
表 B 包含表 A 中的每个部门至少 1 行,其中一些包含一些。
看图片
我想要的是从 A & B 创建的第三张表,它基本上列出了每个部门,然后是全职和兼职的人数。例如,如果在表 b 中找到一个部门,该部门只有全职或兼职的数字(例如部门 D),那么我希望该表显示 0(零)而不是将其留空。
看图片
有人可以就此提出建议吗?
编辑 如果其中一个部门没有例如“兼职”,这意味着他们的兼职员工人数通常为零。
你想要一个PIVOT
select *
from (tableb) s
pivot (Max(staffno) for employee_class in ([Full Time],[Part Time])) p
试试这个:
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
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