Nếu bạn đang sử dụng sql server 2005+. Sau đó, bạn có thể làm như sau:
SELECT
JobsTagMap.JobID,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
WHERE
Tags.TagID=JobsTagMap.TagID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM JobsTagMap
CHỈNH SỬA
Bởi vì bạn đã không cho chúng tôi thấy cấu trúc bảng và dữ liệu trong các bảng khác nhau. Nó hơi khó để biết. Vì vậy, tôi giả định rằng cấu trúc bảng của bạn trông giống như sau:
CREATE TABLE JobsTagMap
(
JobID INT,
TagID INT
)
CREATE TABLE Tags
(
TagID INT,
Title VARCHAR(100)
)
Với dữ liệu này:
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')
Nếu bạn nhận được dữ liệu đó tức là bạn đang hiển thị JobID
không thể là duy nhất. Bạn có thể có một Job
bàn ở đâu đó mà nó là duy nhất. Nếu bạn chỉ muốn sử dụng bảng này mà bạn đang hiển thị thì bạn cần phải làm như sau:
;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
Điều này sẽ giúp bạn có được kết quả này:
1 1 1 Tag1,Tag2
1 2 2 Tag2,Tag5,Tag9
Vì vậy, trong tương lai luôn hiển thị những gì cấu trúc bảng và nó dữ liệu . Điều đó sẽ cung cấp cho bạn câu trả lời tốt hơn