Вы не смогли предоставить какие-либо полезные сведения о столбцах, поэтому я должен был догадаться, но я думаю, что вы ищете что-то вроде.
WITH Persons(PersonId, UserName) AS
(
SELECT 1, 'Bob' UNION ALL
SELECT 2, 'Bill'
), ContactTypes(ContactTypeId, Name) AS
(
SELECT 1, 'Tel' UNION ALL
SELECT 2, 'Email' UNION ALL
SELECT 3, 'PO'
),PersonContacts(PersonId, ContactTypeId, Value) As
(
SELECT 1,1,CAST('(01223) 123456' AS VARCHAR(50)) UNION ALL
SELECT 1,2,CAST('bob@example.com' AS VARCHAR(50)) UNION ALL
SELECT 1,3,CAST('1 Acacia Avenue' AS VARCHAR(50)) UNION ALL
SELECT 2,1,CAST('(01223) 654321' AS VARCHAR(50)) UNION ALL
SELECT 2,2,CAST('bill@example.com' AS VARCHAR(50))
)
/*The above Common Table Expressions are just for demo purposes and so you
can see the assumptions. They will not work on SQL Server 2000. You just need
the below.*/
SELECT P.UserName,
/*I've just used the Ids rather than bothering to join on ContactTypes*/
MAX(CASE WHEN C.ContactTypeId = 1 then C.Value END) Tel,
MAX(CASE WHEN C.ContactTypeId = 2 then C.Value END) Email,
MAX(CASE WHEN C.ContactTypeId = 3 then C.Value END) PO
FROM Persons P
LEFT JOIN PersonContacts C ON C.PersonId = P.PersonId
GROUP BY P.PersonId,P.UserName
Возвращает
UserName Tel Email PO
-------- ------------------- ------------------- ------------------
Bob (01223) 123456 bob@example.com 1 Acacia Avenue
Bill (01223) 654321 bill@example.com NULL