tSQL 服务器 2008.从两个表中获取信息并连接行值



我已经查看了标记为重复的内容,但事实并非如此。我从两张桌子上拉下来,而不是一张。

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

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

项目表:

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

是的,单词字面意思是在中间被切断的。值之间不应该添加任何内容,我还需要保留逗号和其他特殊字符。

明细表:

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 路径将生成您请求的结果,除非您的"详细信息"表中有一个 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 的情况下在我的盒子上尝试了这个,碰巧得到了你要求的结果,但如果没有可以用来强制排序的字段,你真的不能依赖这些结果。

请阅读这篇文章和链接的文章,以获取有关为什么您需要一个字段以及为什么不能依赖未确定的内部"索引"来为您处理它的更多信息: SELECT 查询中的默认行顺序 - SQL Server 2008 与 SQL 2012

最新更新