You can use PIVOT as you suggested, just add a column with ROW_NUMBER :
SELECT [Doctor],[Professor],[Singer],[Actor] FROM (SELECT name, occupation, rn = ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY occupation) FROM @table ) AS src PIVOT ( MIN(name) FOR occupation IN ([Doctor],[Professor],[Singer],[Actor]) ) AS pvt
LiveDemo
Output:
ββββββββββ¦ββββββββββββ¦βββββββββ¦ββββββββ β Doctor β Professor β Singer β Actor β β βββββββββ¬ββββββββββββ¬βββββββββ¬ββββββββ£ β A β A β A β A β β B β β β β ββββββββββ©ββββββββββββ©βββββββββ©ββββββββ
EDIT:
You did not write how to process more lines, therefore consider this case. Above solution will return:
ββββββββββ¦ββββββββββββ¦βββββββββ¦ββββββββ β Doctor β Professor β Singer β Actor β β βββββββββ¬ββββββββββββ¬βββββββββ¬ββββββββ£ β A β A β A β A β β B β β C β β ββββββββββ©ββββββββββββ©βββββββββ©ββββββββ
vs
ββββββββββ¦ββββββββββββ¦βββββββββ¦ββββββββ β Doctor β Professor β Singer β Actor β β βββββββββ¬ββββββββββββ¬βββββββββ¬ββββββββ£ β A β A β A β A β β B β β β β β β β C β β ββββββββββ©ββββββββββββ©βββββββββ©ββββββββ
If you want to use the second case:
SELECT [Doctor],[Professor],[Singer],[Actor] FROM (SELECT name, occupation, rn = DENSE_RANK() OVER (ORDER BY Name) FROM @table ) AS src PIVOT ( MIN(name) FOR occupation IN ([Doctor],[Professor],[Singer],[Actor]) ) AS pvt
LiveDemo2