Если вы используете SQL Server 2005+. Затем вы можете сделать так:
SELECT
JobsTagMap.JobID,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
WHERE
Tags.TagID=JobsTagMap.TagID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM JobsTagMap
EDIT
Потому что ты не показал нам структуру таблицы и данные в разных таблицах. Это было трудно понять. Таким образом, я предполагаю, что ваша структура таблицы выглядит следующим образом:
CREATE TABLE JobsTagMap
(
JobID INT,
TagID INT
)
CREATE TABLE Tags
(
TagID INT,
Title VARCHAR(100)
)
С помощью этих данных:
INSERT INTO JobsTagMap
VALUES(1,1),(1,2),(2,2),(2,4),(2,5)
INSERT INTO Tags
VALUES(1,'Tag1'),(2,'Tag2'),(3,'Tag2'),(4,'Tag5'),(5,'Tag9')
Если вы получаете, что данные, которые вы показываете JobID
не может быть уникальным. У вас может быть таблица Job
где-то там, где она уникальна. Если вы хотите использовать эти таблицы, которые вы выводите, то вам нужно сделать что-то вроде этого:
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,
JobsTagMap.*
FROM
JobsTagMap
)
SELECT
*,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
JOIN JobsTagMap
ON Tags.TagID=JobsTagMap.TagID
WHERE
JobsTagMap.JobID=CTE.JobID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM
CTE
WHERE
CTE.RowNbr=1
Это поможет вам этот результат:
1 1 1 Tag1,Tag2
1 2 2 Tag2,Tag5,Tag9
Таким образом, в будущем всегда показывают, что таблица структура и это данные. Это даст вам лучшие ответы
см http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server –
У меня был один из ответов, но ссылки выше отлично. Ответ от Arion использует тот же подход. – Paparazzi