2012-08-09 5 views
5

Eventuali duplicati:
SQL Server: Can I Comma Delimit Multiple Rows Into One Column?Se count (valori)> 1, si combinano tutti i valori in una singola cella

Vorrei unire tutti i record in un determinato campo in un unico cella (per valore da un'altra colonna) se il numero dei record è superiore a 1. Ad esempio, se ho il seguente codice

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

Sarebbe generare il sotto i risultati

enter image description here

La tabella originale assomiglia a questo

enter image description here

Dato che sia Atlanta e New York hanno più di uno zoo e Tokyo ha un solo zoo, il il risultato finale dovrebbe apparire come

enter image description here

Come faccio a fare questo? Ho pensato di usare il costrutto PIVOT, ma questo crea nuove colonne per ogni possibile valore. Dovrei anche scrivere il nome di ogni possibile nome di zoo nel PIVOT. Questa sarebbe una cattiva forma dal momento che i dati effettivi hanno valori molto più possibili di "nome dello zoo" rispetto a quanto sopra.

risposta

1

È possibile utilizzare XML Path per concat il valore della colonna

;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 

controllare il risultato in SQL Fiddle

+0

vorrei tagliare questo risultato per rimuovere fine virgola di. 'SINISTRA (concat, LEN (concat) -1)' – Kermit

+0

Questo si conclude con un extra ',' alla fine quindi potresti volerlo avvolgere in un'altra selezione e aggiungere 'left (concat, len (concat) -1) 'al campo conciso – Taryn

+0

Aggiornato la mia risposta. Grazie per indicarlo fuori! – praveen