我已经查看了标记为重复的内容,但事实并非如此。我从两张桌子上拉下来,而不是一张。
首先,请允许我说,我与这个数据库的设计无关。
我有两个必须连接的表,然后是未知数量的行,其中数据必须连接成一个巨大的字符串。它们由记录 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