0

我正在加入一堆表,然后将这些数据插入到表变量中。然后我从表中选择这些记录。数据如下所示:

样本选择

从示例中可以看出,唯一数据仅在第 7 列和第 8 列中。在此示例中,只有两行。但它可以是一个无限的数字。因此,我不想向客户端发送一堆行然后整理数据,而是想在 SQL 中执行它并且只发回一行

由于所有数据都是相同的,除了两列,我想连接数据并用逗号分隔它们。这将使客户端操作更加容易。

所以最后,我会有一行,Col7 和 Col8 看起来像这样:

样本数据

关于如何完成这项任务的任何想法?

4

2 回答 2

1

您可以尝试使用 FOR XML:

SELECT STUFF((SELECT',' + Col7 FROM #test FOR XML PATH('')), 1, 1, '' ) as col7

于 2013-07-22T14:02:37.213 回答
1

假设您要将整个表折叠成一行,并丢弃列中的数据,例如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;
于 2013-07-22T14:05:24.143 回答