1

次のテーブルがあるとします。

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

特定のメンバーのすべてのプロジェクト コードと作業時間を 1 つの列に連結した追加の列がある場合、次のような結果を得るにはどうすればよいでしょうか?

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

1 に答える 1

1

FOR XML PATH を使用して、複数行のデータを 1 行に連結できます。

;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 を参照してください

于 2013-07-19T21:05:49.993 に答える