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
我查看了被标记为重复的内容,但事实并非如此。我从两个 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