SQL Server 2008。从两个表中获取信息并连接行值。

SQL Server 2008. Take info from two tables and concatenate row values.

我查看了被标记为重复的内容,但事实并非如此。我从两个 table 中提取,而不是一个。

首先,请允许我说我与该数据库的设计无关。

我有两个必须连接的 table,然后是未知数量的行,其中的数据必须连接成一个巨大的字符串。它们由记录 ID 连接。

项目 table:

Item         RecordID
---------------------
Car A        123
Car B        456
Car C        789

是的,字面意思是中间被截断了。值之间应该没有任何添加,我还需要保留逗号和其他特殊字符。

详情 table:

RecordID     Details
--------------------------------
123          black pain
123          t, radials
123          , green le
123          ather, spo
123          rt steerin
123          g wheel, b
123          uilt-in GP
123          S
456          standard
789          black leat
789          her, teles
789          coping ste
789          ering whee
789          l, seven c
789         up holders
789         , heavy du
789         ty mudflap
789         s

我想要结束的是:

ItemID       RecordID     Details
----------------------------------------------------------------------------
Car A        123          black paint, radials, green leather, sport steering wheel, built-in GPS
Car B        456          standard       
Car C        789          black leather, telescoping steering wheel, seven cup holders, heavy duty mudflaps

我已经查看了所有 XML 个,但不知道该怎么做。

提前致谢。

无法保证您的 STUFF/ FOR XML PATH 会产生您要求的结果,除非您的详细信息 table 中有 IDENTITY 字段或您可以排序的其他值这将强制详细信息文本的顺序。

通常您可以将 STUFF 命令与 ORDER BY 语句一起使用

SELECT
  Item.Item AS ItemID,
  Item.RecordID,
  STUFF( (
           SELECT
             '' + Details
           FROM
             Details
           WHERE
             Details.RecordID = Item.RecordID
             -- ORDER BY SomeLineIndicator
           FOR XML PATH ('')
         ), 1, 0, '' ) AS Details
FROM
  Item

我在没有 ORDER BY 的情况下在我的盒子上试过这个,碰巧得到了你要求的结果,但如果没有一个你可以用来强制排序的字段,你真的不能依赖这些结果。

请阅读这篇 post 和链接的文章,了解有关为什么您需要一个字段以及为什么您不能依赖未确定的内部 "index" 来处理的更多信息给你:Default row order in SELECT query - SQL Server 2008 vs SQL 2012