我有兩個表。 表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 –