2012-09-12 191 views
2

我使用下面的查詢檢索了一些成果SQL交叉表&PIVOT

SELECT CONVERT(varchar, TS.StaffID) + CHAR(13) 
     + SUBSTRING (TS.GivenName, 1 , 1) + '.' + CHAR(13) 
     + TS.Surname AS EmployeeInfo, SH.Hours,ts.UnitID,sh.RowID 
     FROM dbo.tbl_TimesheetStaff AS TS 
     Left OUTER JOIN 
     dbo.tbl_StaffHours AS SH ON 
     SH.ActivityUnitID = TS.ActivityUnitID 
     AND Sh.StaffID=ts.StaffID 
     WHERE TS.UnitID=1 

的結果集看起來像

EmployeeInfo Hours UnitID RowID 
    114 H. Bar  73.71 111 401 
    114 H. Bar  42.44 111 402 
    115 M. Cha  20.39 111 401 
    115 M. Cha  3.616 111 402 
    116 Q. Xyz  20.39 111 401 
    116 Q. Xyz  3.61  111 402 

現在我想的是到EmployeeInfo列值轉換爲列名稱

114 H. Bar 115 M. Cha 116 Q. Xyz RowID 
    73.71  20.39  20.39  401 
    42.44  3.616  3.61  402 

EmployeeInfo中的行數可能會有所不同,因此我需要一個動態支點函數離子。

任何線索..?

+2

動態旋轉是answer.I已經給出了類似的各種問題http://stackoverflow.com/questions/12279442/sql-values-of-rows-答案如柱/ 12280245#12280245。嘗試在你的情況下實現這個概念。 –

回答

2

試試這個:

create table #t table(EmployeeInfo varchar(20), Hours float, UnitID int, RowID int) 
insert into #t 
SELECT CONVERT(varchar, TS.StaffID) + CHAR(13) 
     + SUBSTRING (TS.GivenName, 1 , 1) + '.' + CHAR(13) 
     + TS.Surname AS EmployeeInfo, SH.Hours,ts.UnitID,sh.RowID 
     FROM dbo.tbl_TimesheetStaff AS TS 
     Left OUTER JOIN 
     dbo.tbl_StaffHours AS SH ON 
     SH.ActivityUnitID = TS.ActivityUnitID 
     AND Sh.StaffID=ts.StaffID 
     WHERE TS.UnitID=1 



DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(EmployeeInfo) 
        from #t 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT RowID, ' + @cols + ' 
       from #t 
      pivot 
      ( 
       MAX([Hours]) 
       for Code in (' + @cols + ') 
      ) p ' 
print(@query) 
execute(@query) 
+0

謝謝你的解決方案。儘管存在一個問題,但它在開始時會添加一行額外的NULL數據 –