如果您使用的是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
編輯
因爲你沒有告訴我們的表結構,並在不同的表中的數據。這有點難以分辨。所以,我認爲你的表結構看起來是這樣的:
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