SQL Server - obtener como filas individuales resultados que están almacenados en una columna como valores separad

   
Vista:

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Sergio (4 intervenciones) el 06/09/2017 17:38:10
Hola. En SQL SERVER es posible obtener como filas individuales resultados que están almacenados en una columna como valores separados por comas?

Es decir... tengo una columna llamada NOMBRE que tiene valores:

# Nombre
1 Sergio,Juan
2 Roberto,Mario,Sergio
3 Juan,Ignacio,Sergio,Mario

Si pudiera obtener los nombres únicos, uno en cada fila de la respuesta sería excelente. O sea que el SELECT me devolviera un conjunto de resultados similar al siguiente:

# Nombre
1 Sergio
2 Juan
3 Roberto
4 Mario
5 Ignacio

Sino, me conformo con obtener los nombres en filas y después haré una consulta del tipo DISTINCT sobre esos resultados.

Muchas gracias a la comunidad!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Isaias (3716 intervenciones) el 06/09/2017 20:15:11
Veamos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- drop table #Testdata
create table #Testdata(Data varchar(max))
insert #Testdata select  'Sergio,Juan'
insert #Testdata select  'Roberto,Mario,Sergio'
insert #Testdata select  'Juan,Ignacio,Sergio,Mario'
 
;with tmp (DataItem, Data) as (
select LEFT(Data, CHARINDEX(',',Data+',')-1),
    STUFF(Data, 1, CHARINDEX(',',Data+','), '')
from #Testdata
union all
select LEFT(Data, CHARINDEX(',',Data+',')-1),
    STUFF(Data, 1, CHARINDEX(',',Data+','), '')
from tmp
where Data > ''
)
select  distinct DataItem
from tmp

DataItem
-------------
Ignacio
Juan
Mario
Roberto
Sergio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Sergio (4 intervenciones) el 06/09/2017 20:37:14
Muchas gracias por tu pronta respuesta Isaias!

1
2
3
4
5
6
7
8
9
10
11
12
with tmp (DataItem, copiamail) as (
select LEFT(copiamail, CHARINDEX(',',copiamail+',')-1),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from informes_dbf
union all
select LEFT(copiamail, CHARINDEX(',',copiamail+',')-1),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from tmp
where copiamail > ''
)
select  distinct DataItem
from tmp

Mi tabla en cuestión se llama Informes_dbf y el campo es copiamail. Al correr esa consulta obtengo este error:

Mens. 240, Nivel 16, Estado 1, Línea 1
Los tipos de la parte de delimitador y de la parte recursiva de la columna "DataItem" de la consulta recursiva "tmp" no coinciden.


¿Qué podrá ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Isaias (3716 intervenciones) el 06/09/2017 20:43:22
Amigo Sergio

Las tablas las "invente" yo, tu debes colocar el nombre de tu tabla, en lugar de #Testdata, debes poner Informes_dbf

¿Porque tiene como terminacion _DBF?, ¿asi se llama?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Sergio (4 intervenciones) el 06/09/2017 20:47:31
Yo reemplacé #Testdata por el nombre de mi tabla, que efectivamente se llama así (con la terminación _DBF!!!)
La consulta la quiero hacer sobre el campo que se llama copiamail que es del tipo VARCHAR(1000).
El código de mi consulta es el siguiente... No entiendo porque el error dice que no coinciden los tipos de datos... El hecho de que algún campo pueda contener el valor NULL puede afectar?
Gracias!!!

1
2
3
4
5
6
7
8
9
10
11
12
with tmp (DataItem, copiamail) as (
select LEFT(copiamail, CHARINDEX(',',copiamail+',')-1),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from informes_dbf
union all
select LEFT(copiamail, CHARINDEX(',',copiamail+',')-1),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from tmp
where copiamail > ''
)
select  distinct DataItem
from tmp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Isaias (3716 intervenciones) el 06/09/2017 21:00:37
Si, es importante el TIPO DE DATO que te devuelve el WITH, realiza la siguiente modificacion, con un simple CAST

1
2
3
4
5
6
7
8
9
10
11
12
with tmp (DataItem, copiamail) as (
select cast(LLEFT(copiamail, CHARINDEX(',',copiamail+',')-1) as nvarchar(255)),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from informes_dbf
union all
select cast(LEFT(copiamail, CHARINDEX(',',copiamail+',')-1) as nvarchar(255)),
    STUFF(copiamail, 1, CHARINDEX(',',copiamail+','), '')
from tmp
where copiamail > ''
)
select  distinct DataItem
from tmp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Sergio (4 intervenciones) el 06/09/2017 21:07:08
EXCELENTE
Muchas gracias!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

obtener como filas individuales resultados que están almacenados en una columna como valores separad

Publicado por Isaias (3716 intervenciones) el 06/09/2017 22:30:03
De nada, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad