Sql server 在t-sql中将返回的两行合并为一行

Sql server 在t-sql中将返回的两行合并为一行,sql-server,sql-server-2008,tsql,sql-server-2008-r2,Sql Server,Sql Server 2008,Tsql,Sql Server 2008 R2,我有下面的查询,它返回一个包含人员详细信息的结果。我在数据库中有两种类型的人作为所有者和联系人。我只需要所有者的姓名和地址以及联系人的电子邮件 我写了以下查询,请检查 SELECT DISTINCT s.[id], s.[entity_id], s.[transfered], s.[meta], s.[operation] c.[Company_Name] as CompanyName,

我有下面的查询,它返回一个包含人员详细信息的结果。我在数据库中有两种类型的人作为所有者和联系人。我只需要所有者的姓名和地址以及联系人的电子邮件

我写了以下查询,请检查

SELECT DISTINCT 
        s.[id],
        s.[entity_id],
            s.[transfered],
        s.[meta],
        s.[operation]
        c.[Company_Name] as CompanyName,
        ISNULL(pa.HouseName,'') as HouseName,
        ISNULL(pa.Street,'') as Street,
        ISNULL(pa.Town,'') as Town,
        ISNULL(pa.City,'') as City,
        ISNULL(pa.County,'') as County,
        ISNULL(pa.Country,'') as Country,
        ISNULL(pa.Postcode,'') as PostCode,     
        ISNULL(p.Title,'') as Title,
        ISNULL(p.Forenames,'') as FirstName,
        ISNULL(p.Surname,'') as LastName,
        ISNULL(pc.Email,'') as Email

  FROM 
        dbo.COMPANY c INNER JOIN dbo.Sage_Company_Sync s ON s.entity_id = c.Company_ID
        INNER JOIN dbo.CompanyPostalAddress cpa ON c.Company_ID = cpa.CompanyId
        INNER JOIN dbo.POSTAL_ADDRESS pa ON cpa.PostalAddressId = pa.Address_ID
        LEFT JOIN dbo.CompanyPerson cp ON cp.CompanyId = c.company_id
        INNER JOIN dbo.PERSON p ON p.Person_ID = cp.PersonId
        INNER JOIN dbo.PERSON pc ON pc.Person_ID = cp.PersonId

  WHERE 
        cpa.PostalAddressTypeId = 2
        and cp.PersonTypeId in (1,2)
        and s.transfered = 0
        and s.entity_type = 'company'       
  ORDER BY 
        s.operation ASC
上面的查询返回2行。一个给业主,一个给公司。我的问题是如何使我的查询只返回所有者的姓名和地址详细信息以及联系人的电子邮件

更新

结果

 id entity_id   transfered  meta    operation   CompanyName HouseName   Street  Town    City    County  Country PostCode    Title   FirstName   LastName    Email   PersonType
5   25  0       U   Testing     2  (home Address)   Stoneleigh  Epsom   Surrey  Uk  KTJ19 0PQ   Mr  Dfdf    Dfdf    test@gmail.com  CONTACT
5   25  0       U   Testing     2  (home Address)   Stoneleigh  Epsom   Surrey  Uk  KT1J9 0PQ   Mr  Testing     Testing     OWNER
期望的结果

id  entity_id   transfered  meta    operation   CompanyName HouseName   Street  Town    City    County  Country PostCode    Title   FirstName   LastName    Email   PersonType
5   25  0       U   Testing     2 Westways (home Address)   Stoneleigh  Ezpsofm Surrey  Uk  KT19 Q  Mr  Testing     Testing test@gmail.com  OWNER
电子邮件实际上是联系人的电子邮件


谢谢,

您可以将查询结果存储在临时表或公共表表达式中,然后在此基础上构建另一个查询

考虑以下示例:

DECLARE @tbl TABLE (ID INT, Name VARCHAR(20), Email VARCHAR(20), Relation VARCHAR(20))

INSERT INTO @tbl VALUES (1, 'Somebody', 'xyz@domain.com', 'Employer'), (1, 'Someone', 'Test', 'Employee');

WITH cte1 AS
(
    SELECT * FROM @tbl WHERE Relation = 'Employer'
),
cte2 AS
(
    SELECT t.ID, t.Name, c.Email, t.Relation FROM cte1 c INNER JOIN @tbl t ON c.ID = t.ID WHERE t.relation = 'Employee'
)

SELECT* FROM cte2
您还可以查看以下SQLFIDLE示例:


能否显示此查询的结果和所需的输出?