2013-02-15 47 views
0

我会尝试设置一个场景来清晰地说明我的示例,但假设我的SQL Server数据库有两个表,其中一个带有人名,DOB,最喜欢的颜色和ID以及另一张带有personID和电子邮件的表格。这是一对多的关系(许多电子邮件地址为1人)。我们假设只有一个人有两个电子邮件地址。当我在网页上显示SELECT *的结果时,我会看到2行,唯一的区别是电子邮件地址(和ID,但对于此示例,我将不显示ID的结果)。如何在网页上显示多个数据库行作为单个条目

我的问题是,我们如何解决这个问题,将其显示为只有一个“项目”,并且电子邮件由逗号分隔。请考虑这些图片作为前后:

的数据将出现两次,因为它们是2行由于在数据库中加入: enter image description here

而这正是我想要的:

enter image description here

在我的网页上,我命令的结果通过ID以记下当前的ID,并与每个迭代的前一个ID进行比较,如果匹配,保持显示电子邮件的结果,直到previousID是recentId不同。这也意味着先前将最喜欢的颜色记录为变量,并在没有更多匹配的ID时显示它(我希望这是有道理的)。

这样行吗或者在使用EF时有没有优雅的方式?

回答

1

尝试使用XML路径:

select name, dob, substring(emails, 1, len(emails) - 1) as emails 
from (
    select name, dob, (select email + ', ' 
         from PersonEmail 
         for xml path('')) as emails 
    from Person 
) t 
1

在列出电子邮件的数据库中创建一个函数。

CREATE FUNCTION PersonEmails 
(
    -- Add the parameters for the function here 
    @PersonID INT 
) 

DECLARE @emailList VARCHAR(500) 

SELECT @emailList = COALESCE(@emailList + ', ' , '') + email 
    FROM PersonEmailTable 
    WHERE PersonId = @PersonID 

SELECT @emailList 

然后调用该函数在SQL查询

SELECT Persons.*, dbo.PersonEmails(Persons.ID) as Emails FROM Persons 
相关问题