如何在选择期间将多行合并为一行?

时间:2013-07-22 13:48:44

标签: sql sql-server stored-procedures

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

Sample SELECT

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

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

所以最后,我将有一行,Col7和Col8将如下所示:

Sample Data

有关如何完成此任务的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用FOR XML:

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

答案 1 :(得分: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('')), 1, 1, ''),
  Col8 = STUFF((SELECT ',' + Col8 FROM @x FOR XML PATH('')), 1, 1, '');

结果:

Col7      Col8
--------  -----------
foo,blat  bar,splunge

如果您需要保留ID列值,则需要提供更好的规格。