2012-10-23 49 views
3

我有兩個表。 表A包含部門清單,共有20個部門。操縱結果以顯示行爲列

見圖像

enter image description here

表B包含每個表A中發現部門至少1列,一些含幾。

見圖片

enter image description here

我要的是從A & B的基本上列出每個部門,然後人誰是全職和兼職的數量創造了第三個表。例如,如果在表b中找到的部門只有全部或部分時間的數字(例如部門D),那麼我希望表格顯示0(零),而不是留下空白。

見圖像

enter image description here

任何人都可以對這個建議?

編輯 如果沒有例如其中一個部門的「兼職」,這意味着他們兼職人員數量通常爲零。

回答

3

你想要一個PIVOT

select * 
from (tableb) s 
pivot (Max(staffno) for employee_class in ([Full Time],[Part Time])) p 
+0

這工作,你能解釋我是如何凝聚了全職和兼職,也exmplain什麼在p在最終在做什麼? – JsonStatham

+0

你的意思是「合併」全部和兼職? 'p'只是pivoting的別名。 – podiluska

+1

請參閱Itzik Ben-Gan關於樞軸的優秀文章;他涵蓋了許多不同的數據透視方法。 http://www.sqlmag.com/article/sql-server/pivoting-data –

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