sql >> Databáze >  >> RDS >> Sqlserver

SQL Server zřetězit GROUP BY

Pokud používáte sql server 2005+. Pak můžete postupovat takto:

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

UPRAVIT

Protože jste nám neukázali strukturu tabulky a data v různých tabulkách. Bylo to trochu těžké vědět. Předpokládám tedy, že struktura vaší tabulky vypadá asi takto:

CREATE TABLE JobsTagMap
(
    JobID INT,
    TagID INT
)

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

S těmito údaji:

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

Pokud tato data získáváte, zobrazujete JobID nemůže být jedinečný. Možná máte Job stůl někde, kde je to jedinečné. Pokud chcete použít pouze tyto tabulky, které ukazujete, musíte udělat něco takového:

;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

Tím získáte tento výsledek:

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

V budoucnu tedy vždy ukažte, jaká struktura tabulky a to data . To vám dá lepší odpovědi



  1. Jak zakázat omezení cizího klíče v SQL Server (příklady T-SQL)

  2. Vrácení potvrzené transakce

  3. Zrychlete Django &Postgres pomocí jednoduchého pole JSON

  4. Význam transakčního protokolu na SQL Serveru