2017-09-14 61 views
-3

我有以下声明:SQL结果

SELECT   
    Person.PersonID, Person.PersonName, Person.Surname, 
    Address.Street, Address.PostCode, 
    (SELECT Phones.Num 
    WHERE (Phones.CommunicationTypeId = '78')) AS email, 
    (SELECT Phones.Num 
    WHERE (Phones.CommunicationTypeId = '83')) AS mobile, 
    (SELECT Phones.Num 
    WHERE (Phones.CommunicationTypeId = '88')) AS phone 
FROM  
    Address 
RIGHT OUTER JOIN 
    Person ON Address.ObjectId = Person.PersonID 
RIGHT OUTER JOIN 
    Phones ON Person.PersonID = Phones.ObjectID 

现在结果表明单独行,而我想有它在一排:

enter image description here

如何将其整合到只有一行?

+2

如果它总是一行有一个值,而另一个有'null',那么可以使用'max'和'group by'。如果可以有多个非空值,你必须决定你想要的与他们一起做。 – HoneyBadger

回答

1

看起来像你的人有一个以上相应电话记录(我猜2条不同类型的。

SELECT 
    ObjectID, 
    MAX(CASE WHEN CommunicationTypeId = '78' THEN Num ELSE null END) as email, 
    MAX(CASE WHEN CommunicationTypeId = '83' THEN Num ELSE null END) as mobile, 
    MAX(CASE WHEN CommunicationTypeId = '88' THEN Num ELSE null END) as phone 
FROM Phones 
GROUP BY ObjectID 

的选择上面回报每个人3列,你可以在主查询

使用
SELECT  
    Person.PersonID, Person.PersonName, Person.Surname, 
    Address.Street, Address.PostCode, 
    Phones.email, Phones mobile, Phones.phone 
FROM 
    Address 
RIGHT OUTER JOIN 
    Person ON Address.ObjectId = Person.PersonID 
RIGHT OUTER JOIN 
    (sub query above) Phones ON Person.PersonID = Phones.ObjectID