我有两个表。 表A包含部门清单,共有20个部门。操纵结果以显示行为列
见图像
表B包含每个表A中发现部门至少1列,一些含几。
见图片
我要的是从A & B的基本上列出每个部门,然后人谁是全职和兼职的数量创造了第三个表。例如,如果在表b中找到的部门只有全部或部分时间的数字(例如部门D),那么我希望表格显示0(零),而不是留下空白。
见图像
任何人都可以对这个建议?
编辑 如果没有例如其中一个部门的“兼职”,这意味着他们兼职人员数量通常为零。
我有两个表。 表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
这工作,你能解释我是如何凝聚了全职和兼职,也exmplain什么在p在最终在做什么? – JsonStatham
你的意思是“合并”全部和兼职? 'p'只是pivoting的别名。 – podiluska
请参阅Itzik Ben-Gan关于枢轴的优秀文章;他涵盖了许多不同的数据透视方法。 http://www.sqlmag.com/article/sql-server/pivoting-data –