Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server Concatenate GROUP BY

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề truy vấn Sql 2008 - LatLong nào tồn tại trong một đa giác địa lý?

  2. Tạo trường hợp cho dịch vụ SQL Server thông thường

  3. Hiệu suất tổng hợp có điều kiện

  4. SQL Server REPLACE () so với TRANSLATE ():Sự khác biệt là gì?

  5. Dấu phẩy Được phân tách danh sách các hàng của một cột với nhóm theo các cột khác