我有两张这样的表:
和
第一个生成的表列出了所有的actor / director / other,第二个表列出了所有的电影。我需要做的是将所有Person_ID和Name放在第二个表中的一列中,理想情况是通过连接和XML转换。我知道如何将整个表转换为XML,但我不知道如何动态地执行十几行,是迭代的方式吗?有什么想法吗?
答案 0 :(得分:1)
如果您使用FOR XML PATH('')
,则会删除根标记。如果未指定列别名,则只输出该值。因此,您可以在子查询中创建一个值字符串作为列值之一。这样的事情应该让你开始:
create table #Cast (FilmID int, Person_ID int, PersonName varchar(20))
create table #Films (FilmID int , FilmName varchar(20))
insert into #Cast values (1, 1, 'bob')
insert into #Cast values (1, 2, 'tom')
insert into #Cast values (2, 3, 'sam')
insert into #Cast values (2, 4, 'ray')
insert into #Films values (1, 'Flowers for Charlie')
insert into #Films values (2, 'Batman')
SELECT #Films.*,
SUBSTRING(
(SELECT ( ',' + convert(varchar(10),Person_ID) + ',' + PersonName)
FROM #Cast
WHERE #Films.FilmID = #Cast.FilmID
ORDER BY #Films.FilmID, #Cast.FilmID
FOR XML PATH('')
), 2, 8000) CastList
FROM #Films