0

私は3つのテーブルを持っています:

ムービーDB

movieID | Title
1       | Star War

スターリングDB

movie ID | nameID
1        | 1
1        | 2
1        | 3
1        | 4
1        | 5

nameDB

nameID | Name
1      | Harrison Ford
2      | Mark Hamill
3      | Carrie Fisher
4      | Peter Cushing
5      | Alec Guinness

出力を次のようにしたい:

ID | Title    | Starrings
1  | Star War | Harrison Ford, Mark Hamill, Carrie Fisher, Peter Cushing, Alec Guinness
4

1 に答える 1

1

SQL Server には値を連結する関数がないFOR XML PATHため、結果を取得するために使用できます。

select m.movieID,
  m.title,
  STUFF((SELECT  ', ' + n.name
         from name n
         inner join starring s
           on n.nameID = s.nameid
         where s.movieID = m.movieID
         group by n.name, n.nameid
         order by n.nameid
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') starrings
from movie m;

SQL Fiddle with Demoを参照してください。

FOR XML PATHまたは、次を使用できますCROSS APPLY

select m.movieID,
  m.title,
  left(c.stars, len(c.stars)-1) stars
from movie m
cross apply
(
  select n.name + ', '
  from name n
  inner join starring s
    on n.nameID = s.nameid
  where s.movieID = m.movieID
  group by n.name, n.nameid
  order by n.nameid
  FOR XML PATH('')
) c (stars);

デモで SQL Fiddle を参照してください

于 2013-04-11T18:52:51.560 に答える