Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server Concatenate GROUP BY

Ако използвате sql сървър 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

Така че в бъдеще винаги показвайте каква структура на таблицата и тоданни . Това ще ви даде по-добри отговори



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Целият процес за възстановяване на база данни на SQL Server от командния ред

  2. За да намерите следващия работен ден

  3. Средна стойност на множество колони

  4. SQL Server:нула VS празен низ

  5. Външният ключ подобрява ли ефективността на заявката?