sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Sammenkæd GROUP BY

Hvis du bruger sql server 2005+. Så kan du gøre sådan her:

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

REDIGER

Fordi du ikke viste os tabelstrukturen og dataene i de forskellige tabeller. Det var lidt svært at vide. Så jeg går ud fra, at din tabelstruktur ser nogenlunde sådan ud:

CREATE TABLE JobsTagMap( JobID INT, TagID INT)CREATE TABLE Tags( TagID INT, Titel VARCHAR(100)) 

Med disse data:

INSERT INTO JobsTagMapVALUES(1,1),(1,2),(2,2),(2,4),(2,5)INSERT INTO TagsVALUES(1,'Tag1'),( 2,'Tag2'),(3,'Tag2'),(4,'Tag5'),(5,'Tag9') 

Hvis du får disse data, viser du JobID kan ikke være unikt. Du har muligvis et Job bord et sted, hvor det er unikt. Hvis du bare vil bruge disse tabeller, som du viser, skal du gøre noget som dette:

;WITH CTEAS( SELECT ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr, JobsTagMap.* FROM JobsTagMap)SELECT *, TING ( ( SELECT ',' +Titel FRA Tags JOIN JobsTagMap ON Tags .TagID=JobsTagMap.TagID WHERE JobsTagMap.JobID=CTE.JobID FOR XML PATH('') ) ,1,1,'') SOM TitelFRA CTEWHERE CTE.RowNbr=1

Dette vil give dig dette resultat:

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

Så vis i fremtiden altid hvilken tabelstruktur og det data . Det vil give dig bedre svar



  1. 'CONTINUE' nøgleord i Oracle 10g PL/SQL

  2. Hvor stor er en Oracle XMLType, når den er gemt som BINÆR XML

  3. INDSTIL TEKSTSTØRRELSE Virker ikke i SQL Server? Tjek det her.

  4. Hvordan finder jeg det mest almindelige resultat i en kolonne i min MySQL-tabel