2013-07-19 117 views
1

說我有如下表:在SQL Server 2008中連接動態列?

MemberName | ProjectCode | HoursWorked 
John Smith | ABC, Inc. |  5  
John Smith | Intel, Inc. |  3  
Mike Jones | Sesame St. |  10  

,這是我用來獲取它的語句:

SELECT MemberName, ProjectCode, SUM(HoursWorked) 
FROM table 
GROUP BY MemberName, ProjectCode 
ORDER BY MemberName 

我將如何能夠產生以下結果,其中有添加的附加列是否將所有項目代碼和工作小時數連接到一列中?

MemberName | HoursWorked | Details 
John Smith |  8  | ABC, Inc.-5, Intel, Inc.-3 
Mike Jones |  10  | Sesame St.-10 

回答

1

您可以使用FOR XML PATH數據的多行連接成單行:

;with cte as 
(
    select membername, hoursworked, 
    projectcode +'-'+cast(hoursworked as varchar(10)) projectcode 
    from yourtable 
) 
select c.membername, 
    sum(c.hoursworked) hoursworked, 
    STUFF(
     (SELECT ', ' + projectcode 
      FROM cte c2 
      where c.membername = c2.membername 
      FOR XML PATH ('')) 
      , 1, 1, '') AS details 
from cte c 
group by c.membername; 

SQL Fiddle with Demo

+0

我給它一個鏡頭。謝謝。 – F0rgiven

+0

感謝它的工作! – F0rgiven