2012-09-28 35 views
18

Estoy trabajando en una consulta que recopilará datos de una tabla y mostrará los datos de un informe.Fusionar varias filas en una columna sin duplicados

Los datos se ve así:

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

quiero que se muestre como este

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

Pero todo lo que consigo es una lista combinada de todos los datos en la columna de la puntuación de este tipo

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

¿Alguien tiene una idea de cómo hacer que esto funcione?

+0

¿Has probado con 'DISTINCT'? – Kermit

+3

¿Por qué querrías? Eso es un Anti-Patrón SQL. – MatBailie

+0

¿puede un 'CTE' recurrente responder a esto? donde la recurrencia concatena cada puntaje a una cadena? – whytheq

Respuesta

33

Para SQL Server, puede utilizar:

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

No tengo idea de cómo funciona esto, pero funcionó. ¡Asombroso! Gracias. – Lukas

+0

¿Cómo puedo reemplazar la coma con un avance de línea de retorno de carro? Intenté reemplazar ',' con CHAR (13) + (Char10) pero siguió reemplazándolos con "# x0D;" – Osprey

+1

@Osprey Por favor, publique una nueva pregunta con su consulta y lo que está tratando de hacer. :) – Taryn

1

Un poco tarde y un poco fuera de tema como por otros RDBMS, pero me encontré con este hilo de la búsqueda de una solución a este problema en Postgres. Encontré uno, así que si alguien más necesita resolver este problema en Pg:

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

string_agg es una función de Oracle; no existe en mssql. – MarwaAhmad

+0

@MarwaAhmad 'STRING_AGG' no es una función de Oracle. Es un [PostgreSQL uno] (https://www.postgresql.org/docs/current/static/functions-aggregate.html) (y ahora un SQL Server uno a partir de SQL Server 2017). – jpmc26

Cuestiones relacionadas