Om du använder sql server 2005+. Då kan du göra så här:
SELECT
JobsTagMap.JobID,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
WHERE
Tags.TagID=JobsTagMap.TagID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM JobsTagMap
REDIGERA
Eftersom du inte visade oss tabellstrukturen och data i de olika tabellerna. Det var lite svårt att veta. Så jag antar att din tabellstruktur ser ut ungefär så här:
CREATE TABLE JobsTagMap
(
JobID INT,
TagID INT
)
CREATE TABLE Tags
(
TagID INT,
Title VARCHAR(100)
)
Med dessa data:
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')
Om du får den informationen visar du JobID
kan inte vara unikt. Du kanske har ett Job
bord någonstans där det är unikt. Om du bara vill använda dessa tabeller som du visar måste du göra något så här:
;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
Detta ger dig det här resultatet:
1 1 1 Tag1,Tag2
1 2 2 Tag2,Tag5,Tag9
Så i framtiden visa alltid vilken tabellstruktur och det data . Det ger dig bättre svar