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