Please, read my comment to the question, because i'm not sure i understand you well ;(
[EDIT]
DECLARE @tmp TABLE (article VARCHAR(30), keywrd VARCHAR(30))
INSERT INTO @tmp (article, keywrd)
VALUES('artNo 1', 'keyword1'),
('artNo 1', 'keyword2'),
('artNo 1', 'keyword3'),
('artNo 1', 'keyword4'),
('artNo 1', 'keyword5'),
('artNo 2', 'keyword1'),
('artNo 2', 'keyword2'),
('artNo 2', 'keyword5'),
('artNo 2', 'keyword6'),
('artNo 3', 'keyword1'),
('artNo 3', 'keyword2'),
('artNo 3', 'keyword3'),
('artNo 4', 'keyword3')
SELECT DISTINCT article, STUFF((SELECT TOP(3) ',' + keywrd
FROM @tmp AS t2
WHERE t2.article = t1.article
FOR XML PATH('')),1,1,'') AS Keywrds
FROM @tmp AS t1
SELECT article, [1], [2], [3]
FROM (
SELECT article, keywrd, ROW_NUMBER() OVER(PARTITION BY article ORDER BY keywrd) AS KeyId
FROM @tmp
) AS DT
PIVOT(MAX(keywrd) FOR KeyId IN([1], [2], [3])) AS PT
ORDER BY [1], [2], [3]
1. query produces result:
artNo 1 keyword1,keyword2,keyword3
artNo 2 keyword1,keyword2,keyword5
artNo 3 keyword1,keyword2,keyword3
artNo 4 keyword3
2. query produces result:
artNo 1 keyword1 keyword2 keyword3
artNo 3 keyword1 keyword2 keyword3
artNo 2 keyword1 keyword2 keyword5
artNo 4 keyword3 NULL NULL
Still i'm not sure it meets yous requirements. Please, let me know is that what you want to achieve.
[/EDIT]