我正在加入一堆表,然后将这些数据插入到表变量中。然后我从表中选择这些记录。数据如下所示:
从示例中可以看出,唯一数据仅在第 7 列和第 8 列中。在此示例中,只有两行。但它可以是一个无限的数字。因此,我不想向客户端发送一堆行然后整理数据,而是想在 SQL 中执行它并且只发回一行。
由于所有数据都是相同的,除了两列,我想连接数据并用逗号分隔它们。这将使客户端操作更加容易。
所以最后,我会有一行,Col7 和 Col8 看起来像这样:
关于如何完成这项任务的任何想法?
我正在加入一堆表,然后将这些数据插入到表变量中。然后我从表中选择这些记录。数据如下所示:
从示例中可以看出,唯一数据仅在第 7 列和第 8 列中。在此示例中,只有两行。但它可以是一个无限的数字。因此,我不想向客户端发送一堆行然后整理数据,而是想在 SQL 中执行它并且只发回一行。
由于所有数据都是相同的,除了两列,我想连接数据并用逗号分隔它们。这将使客户端操作更加容易。
所以最后,我会有一行,Col7 和 Col8 看起来像这样:
关于如何完成这项任务的任何想法?
您可以尝试使用 FOR XML:
SELECT STUFF((SELECT',' + Col7 FROM #test
FOR XML PATH('')), 1, 1, '' ) as col7
假设您要将整个表折叠成一行,并丢弃列中的数据,例如ID
:
DECLARE @x TABLE(Col7 varchar(255), Col8 varchar(255));
INSERT @x SELECT 'foo','bar'
UNION ALL SELECT 'blat','splunge';
SELECT Col7 = STUFF((SELECT ',' + Col7 FROM @x FOR XML PATH(''),
TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 1, ''),
Col8 = STUFF((SELECT ',' + Col8 FROM @x FOR XML PATH(''),
TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 1, '');
结果:
Col7 Col8
-------- -----------
foo,blat bar,splunge
在 SQL Server 2017+ 上,它要简单得多:
SELECT Col7 = STRING_AGG(Col7, ','),
Col8 = STRING_AGG(Col8, ',')
FROM @x;