Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server Konkatenacja GROUP BY

Jeśli używasz serwera sql 2005+. Następnie możesz zrobić tak:

SELECT 
    JobsTagMap.JobID,
    STUFF
    (
        (
            SELECT 
                ',' +Title
            FROM
                Tags
            WHERE
                Tags.TagID=JobsTagMap.TagID
            FOR XML PATH('')
        )
    ,1,1,'') AS Title
FROM JobsTagMap

EDYTUJ

Ponieważ nie pokazałeś nam struktury tabeli i danych w różnych tabelach. Trochę trudno było to stwierdzić. Zakładam więc, że struktura tabeli wygląda mniej więcej tak:

CREATE TABLE JobsTagMap
(
    JobID INT,
    TagID INT
)

CREATE TABLE Tags
(
    TagID INT,
    Title VARCHAR(100)
)

Z tymi danymi:

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')

Jeśli otrzymujesz te dane, pokazujesz JobID nie może być unikalny. Możesz mieć Job stół gdzieś, gdzie jest wyjątkowy. Jeśli chcesz tylko użyć tej tabeli, którą pokazujesz, musisz zrobić coś takiego:

;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

Otrzymasz ten wynik:

1   1   1   Tag1,Tag2
1   2   2   Tag2,Tag5,Tag9

Dlatego w przyszłości zawsze pokazuj, jaka jest struktura tabeli i to dane . Dzięki temu uzyskasz lepsze odpowiedzi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wymuś kolejność częściowego łączenia w SQL Server

  2. sql server 2008 plik xml do tabeli

  3. SQL Server 2005/2008 Grupuj według instrukcji z parametrami bez użycia dynamicznego SQL?

  4. SQL WHERE.. IN klauzula wiele kolumn

  5. Zastąp pierwsze wystąpienie podciągu w ciągu w SQL