将唯一列值合并为一个以避免重复

时间:2013-12-19 17:13:40

标签: sql sql-server tsql

为简单起见,假设我有account#加入的两个表。第二个表有两列id and comment。每个帐户可以有一个或多个评论,每个唯一评论都有唯一ID。

我需要编写一个t-sql查询为每个帐户生成一行 - 我认为这意味着我需要为每个帐户组合尽可能多的注释。这假定结果集只显示帐号#once。简单?

3 个答案:

答案 0 :(得分:1)

Sql Server是一个最适合存储数据和检索数据的RDBMS,您可以通过一个非常简单的查询来检索所需的数据,但是应该使用任何报告工具(如ssrs或水晶报告)来处理所需的格式

您的查询将是一个简单的内部联接,如此

SELECT A.Account , B.Comment
FROM TableA AS A INNER JOIN TableB AS B
ON A.Account = B.Account

现在,您可以使用报告工具在显示数据时按帐户对所有评论进行分组。

答案 1 :(得分:1)

我同意M. Ali的意见,但如果您没有这个选项,以下内容将会有效。

SELECT [accountID]
 , [name]
 , (SELECT CAST(Comment + ', ' AS VARCHAR(MAX)) 
     FROM [comments] 
     WHERE (accountID = accounts.accountID) 
     FOR XML PATH ('')
  ) AS Comments
FROM accounts

SQL Fiddle

答案 2 :(得分:1)

在我的实际项目中,我有这种确切的情况。 您需要的是一个聚合评论的解决方案,以便每account#只显示一行。

我通过创建一个连接注释的函数来解决它,如下所示:

create function dbo.aggregateComments( @accountId integer, @separator varchar( 5 ) )
as
begin;
    declare @comments varchar( max ); set @comments = '';

    select @comments = @comments + @separator + YouCommentsTableName.CommentColumn
      from dbo.YouCommentsTableNAme
     where YouCommentsTableName.AccountId = @accountId;

    return @comments;
end;

您可以通过以下方式查询:

select account#, dbo.aggretateComments( account#, ',' )
  from dbo.YourAccountTableName

创建一个函数将为您提供一个检索评论的常用位置。这是一个很好的编程实践。