2012-07-13 15 views
5

tengo valores de la tabla en este formato¿Cómo puedo obtener valores distintos en COALESCE()

sam 
jack 
sam 
john 

Declare @name varchar(max) 
select @name = COALESCE(@name + ', ','')+ user_email 
from PostedCommentMaster where article_id = @id 

¿Cómo puedo obtener un valor distinto

sam,jack,john 

como este.

+0

¿Por qué está usando 'COALESCE' aquí? Primero declara la variable @name, luego verifica inmediatamente si es nula. Siempre será nulo, ya que nunca se ajustará a nada – paul

+0

@paul: esta es una forma (no documentada) de concatenar una columna de un conjunto de resultados. –

+1

Veo, por lo que '@ name' en realidad se vuelve a evaluar por cada fila devuelta. inteligente. – paul

Respuesta

15

se puede envolver la instrucción de selección en una subselección y aplicar se unen en los resultados.

Declare @name varchar(max) 

select @name = COALESCE(@name + ', ','') + user_email 
from (select distinct user_email 
     from PostedCommentMaster 
     where article_id = @id) pc 

Tenga en cuenta que esto utiliza una característica no documentada de SQL Server para concatenar los resultados en una cadena. Aunque ya no puedo encontrar un enlace, recuerdo haber leído que no deberías confiar en este comportamiento.

Una mejor alternativa sería utilizar la sintaxis FOR XML para devolver una cadena concatenada. A search on SO devuelve resultados múltiples que puede usar como ejemplo.

+0

funcionó gracias .. –

3

Aquí tiene

Declare @name varchar(max) 
select 
    @name = COALESCE(@name + ', ','')+name from (select distinct user_email 
from 
    PostedCommentMaster) as t 
where 
    article_id = @id 
0

Puede usar group by para valores únicos.

Declare @name varchar(max) 
select @name = COALESCE(@name + ', ','')+ user_email 
from PostedCommentMaster where article_id = @id 
group by user_email 
Cuestiones relacionadas