处理结果以将行显示为列

时间:2012-10-23 13:43:34

标签: sql tsql

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

见图片

enter image description here

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

见图片

enter image description here

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

见图片

enter image description here

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

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

3 个答案:

答案 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