If the id column is sequential as you listed in your example, then it is easy to pivot based on the id:
SELECT MAX(CASE WHEN ID = 1 THEN Name END) AS name1,
MAX(CASE WHEN ID = 2 THEN Name END) AS name2,
...
MAX(CASE WHEN ID = 20 THEN Name END) AS name20
FROM (
SELECT TOP 20 t.ID, t.Name
FROM tblContacts AS t
ORDER BY t.Name) AS T;
If the id column is not sequential then you can use the ranking functions (SQL Server 2005/2008) and pivot on the rank:
SELECT MAX(CASE WHEN rk = 1 THEN Name END) AS name1,
MAX(CASE WHEN rk = 2 THEN Name END) AS name2,
...
MAX(CASE WHEN rk = 20 THEN Name END) AS name20
FROM (
SELECT TOP 20 t.ID, t.Name, ROW_NUMBER() OVER(ORDER BY t.Name) AS rk
FROM tblContacts AS t
ORDER BY t.Name) AS T;
--
Plamen
Ratchevhttp://www.SQLStudio.com