JOIN and GROUP BY with additional columns
Seems you would need to do some CASE statements along with some UNION ALL like this:

SELECT id, 
       CASE 
              WHEN idcounter &lt;=1 THEN text1 
              ELSE "" 
       end AS text1, 
       CASE 
              WHEN idcounter &lt;=1 THEN location1 
              ELSE "" 
       end AS location1, 
       CASE 
              WHEN idcounter &lt;=2 THEN text2 
              ELSE "" 
       end AS text2, 
       CASE 
              WHEN idcounter &lt;=2 THEN location2 
              ELSE "" 
       end AS location2, 
       CASE 
              WHEN idcounter &lt;=3 THEN text3 
              ELSE "" 
       end AS text3, 
       CASE 
              WHEN idcounter &lt;=3 THEN location3 
              ELSE "" 
       end AS location3 
FROM  ( 
                SELECT   t.id        AS id, 
                         Count(t.id) AS idcounter 
                group BY t.id ) AS results1 
UNION ALL 
SELECT     t.id       AS id, 
           j.text     AS text1, 
           l.location AS location1, 
FROM       [text] t WITH (nolock) 
INNER JOIN text_location tl WITH (nolock) 
ON         tl.textid = t.id 
INNER JOIN location l WITH (nolock) 
ON         tl.locationid = l.id 
ORDER BY   l.location 
LIMIT      1 
UNION ALL 
SELECT     t.id       AS id, 
           j.text     AS text2, 
           l.location AS location3, 
FROM       [text] t WITH (nolock) 
INNER JOIN text_location tl WITH (nolock) 
ON         tl.textid = t.id 
INNER JOIN location l WITH (nolock) 
ON         tl.locationid = l.id 
ORDER BY   l.location 
LIMIT      1 
offset     1 
UNION ALL 
SELECT     t.id       AS id, 
           j.text     AS text3, 
           l.location AS location3, 
FROM       [text] t WITH (nolock) 
INNER JOIN text_location tl WITH (nolock) 
ON         tl.textid = t.id 
INNER JOIN location l WITH (nolock) 
ON         tl.locationid = l.id 
ORDER BY   l.location 
LIMIT      1 
offset     2


If you provide an SQLFiddle or some such we could play with it.