为简单起见,假设我有account#
加入的两个表。第二个表有两列id and comment
。每个帐户可以有一个或多个评论,每个唯一评论都有唯一ID。
我需要编写一个t-sql查询为每个帐户生成一行 - 我认为这意味着我需要为每个帐户组合尽可能多的注释。这假定结果集只显示帐号#once。简单?
答案 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
答案 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
创建一个函数将为您提供一个检索评论的常用位置。这是一个很好的编程实践。