SQL行轉列

以前在處理數據時,沒有考慮過使用行轉列,更多的是使用建立臨時表,用過以後銷燬,今天碰到了棘手的問題,採用臨時表很複雜,因此採用行轉列來實現。函數

先描述一下問題,當下作的人事考覈系統中,分爲上半年、下半年的考覈,考覈類型有多種,查詢出來的數據以下:code

能夠看出來,這樣數據處理的效果並很差,而從MSSQL2005起,MSSQL提供的函數PIVOT能夠實現行轉列的問題,不過爲了實現向下的兼容,我使用case when實現:blog

select
  dept.DeptName as deptname,
  usr.realName as realname,
  rol.RoleName as rolename,
  usr.userCode as usercode,
  
  sum(case check1.YearDescr when '2014上' then check1.ManagerScore else 0 end) as '2014上',
  sum(case check1.YearDescr when '2014下' then check1.ManagerScore else 0 end) as '2014下'
 from T_Department dept
 left join T_Roles rol on dept.DeptID=rol.DeptID
 left join T_UserRole usrRol on usrRol.RoleID=rol.RoleID
 left join T_Users usr on usr.userId=usrRol.UserID
 left join HR_PersonalGoal check1 on check1.Creator=usr.userId
 where usr.userId =43
 group by dept.LineSort,deptname,usr.realname,rolename,usr.usercode
 order by dept.LineSortselect

相關文章
相關標籤/搜索