2012-08-09 9 views
5

Duplicar posible:
SQL Server: Can I Comma Delimit Multiple Rows Into One Column?Si el recuento (valores)> 1, se combinan todos los valores en una sola celda

me gustaría combinar todos los registros en un determinado campo en una sola celda (por valor de otra columna) si el conteo de los registros es más de 1. Por ejemplo, si tengo el siguiente código

SELECT city, count(zoo name) AS 'count of zoo name' FROM mytable 

Se generaría el siguiente resultados

enter image description here

La tabla original están presentes

enter image description here

Dado que tanto Atlanta y Nueva York tienen más de un zoológico y Tokio sólo tiene un zoológico, el el resultado final debe verse como

enter image description here

¿Cómo voy a hacer esto? Pensé en usar la construcción PIVOT, pero eso crea nuevas columnas para cada valor posible. También tendría que escribir el nombre de cada posible nombre de zoológico en el PIVOT. Esta sería una mala forma ya que los datos reales tienen muchos más valores posibles de "nombre de zoológico" que los anteriores.

Respuesta

1

Puede utilizar XML Path a concat el valor de columna

;With Cte(city,concat) as 
(
    select city, (select a.Zoo+',' 
    from Sample a 
    where a.city=b.city 
    for XML PATH ('')) concat 
    from Sample b 
    group by city 
) 
Select city,left(concat, len(concat) -1) from cte 

Comprobar el resultado en SQL Fiddle

+0

Me recortar este resultado para eliminar terminando por comas de. 'LEFT (concat, LEN (concat) -1)' – Kermit

+0

Esto termina con un ',' adicional al final, por lo que es posible que desee ajustar esto en otra selección y agregar 'left (concat, len (concat) -1) 'al campo concat – Taryn

+0

Actualización de mi respuesta .Gracias por señalarlo.! – praveen

Cuestiones relacionadas