2012-09-28 13 views
18

Sto lavorando a una query che raccoglierà dati da una tabella e visualizzerà i dati per un report.Unisci più righe in una colonna senza duplicati

I dati si presenta così:

Player Score 
001  10 
001  20 
002  20 
002  20 
001  10 
002  10 
003  20 
002  20 
001  10 

voglio deve essere visualizzato come questo

Player Score 
001 10,20 
002 10,20 
003 20 

Ma tutto quello che ottiene è una lista combinata di tutti i dati nella colonna punteggio come questo

Player Score 
001 10,20,10,10 
002 20,20,10,20 
003 20 

Qualcuno ha un'idea di come farlo funzionare?

+0

Hai provato a utilizzare 'DISTINCT'? – Kermit

+3

Perché vorresti? Questo è un anti-pattern SQL. – MatBailie

+0

può un ricorrente 'CTE' rispondere a questo? dove la ricorrenza concatena ciascun punteggio a una stringa? – whytheq

risposta

33

Per SQL Server è possibile utilizzare:

select player, 
    stuff((SELECT distinct ', ' + cast(score as varchar(10)) 
      FROM yourtable t2 
      where t2.player = t1.player 
      FOR XML PATH('')),1,1,'') 
from yourtable t1 
group by player 
+2

Non ho idea di come funzioni, ma ha funzionato. Stupefacente! Grazie. – Lukas

+0

Come posso sostituire la virgola con un avanzamento riga di ritorno a capo? Ho provato a sostituire "," con CHAR (13) + (Char10) ma continuava a sostituirli con "# x0D;" – Osprey

+1

@Osprey Si prega di inviare una nuova domanda con la tua domanda e cosa stai cercando di fare. :) – Taryn

1

un po 'tardi e un po' fuori tema, come per altri RDBMS, ma ho trovato questa discussione alla ricerca di una soluzione a questo problema in Postgres. Ne ho trovato uno, quindi se qualcun altro ha bisogno di risolvere questo problema in Pg:

SELECT string_agg(DISTINCT <column>,'delimiter') FROM <table> GROUP BY <column2> 
+0

string_agg è una funzione Oracle; non esiste in mssql. – MarwaAhmad

+0

@MarwaAhmad 'STRING_AGG' non è una funzione Oracle. È un [PostgreSQL] (https://www.postgresql.org/docs/current/static/functions-aggregate.html) (e ora uno di SQL Server a partire da SQL Server 2017). – jpmc26

Problemi correlati