Oracle - JOIN CON CADENA DELIMITADA POR COMAS

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Alejandro (10 intervenciones) el 25/10/2018 14:19:25
Hola Expertos, favor me pueden ayudar con esto:

Me solicitan realizar un cruce entre un campo ID versus Cadena de delimitada por comas con IDs

Id Campo1 Local Ids
1 Alejando AAA 1,2
2 Manuel BBB 1,2,3
3 Roberto CCC 3

Genera esta Salida
LOCAL VISITADORES
AAA ALEJANDRO AND MANUEL
BBB ALEJANDRO AND MANUEL AND ROBERTO
CCC ROBERTO

Amigos por favor me pueden indicar si es posible hacer esto cualquier idea o sugerencia es bienvenida muchas gracias a todos.
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 Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Antonio (13 intervenciones) el 26/10/2018 22:30:20
mira, hace poco trabajé unas listas de ids separadas por comas y le encontré una solución que a mi me resolvió bien el problema.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create table tablax
(
  id integer,
  campo1 varchar2(100),
  local varchar2(30),
  ids varchar2(50)
) ;
 
insert into tablax (id,campo1,local,ids) values(1,'Alejandro','AAA','1,2') ;
insert into tablax (id,campo1,local,ids) values(2,'Manuel','BBB','1,2,3') ;
insert into tablax (id,campo1,local,ids) values(3,'Roberto','CCC','3') ;
commit ;
 
select local, upper((select listagg(campo1,' and ') within group (order by campo1) from tablax where x.ids like '%'||id||'%' )) visitadores from tablax x;

esta es una solución para tablas pequeñas, si la tabla es muy grande no es una solución eficiente porque no utiliza indice, yo tengo otra solución que estoy trabajando y en brebe te la voy a enviar.
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 Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Antonio (13 intervenciones) el 26/10/2018 23:28:28
Esta es la otra solución que te comentaba, un poco más compleja pero muy eficiente para tablas grandes.
En este caso es necesario que exista un índice o una llave primaria por id.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
create table tablax
(
  id integer,
  campo1 varchar2(100),
  local varchar2(30),
  ids varchar2(50)
) ;
 
create unique index tablax_pk on tablax (id) ;
 
insert into tablax (id,campo1,local,ids) values(1,'Alejandro','AAA','1,2') ;
insert into tablax (id,campo1,local,ids) values(2,'Manuel','BBB','1,2,3') ;
insert into tablax (id,campo1,local,ids) values(3,'Roberto','CCC','3') ;
commit ;
 
-- SOLUCION --
with t1 as (
select id, to_number(replace(substr(ids,1,instr(ids,',',1,2)),',','')) idn
from
(
  select unique id, substr(ids,instr(ids,',',1,level)) ids
  from
  (
    select id, ','||ids||',' ids, length(ids)-length(replace(ids,',',''))+1 cant
    from tablax
  )
  connect by level <= cant
) )
select
    local,
    UPPER(
      (select
           listagg(campo1,' and ') within group (order by campo1)
         from tablax
         where id in (select idn from t1 where id=x.id))) visitadores
  from tablax x ;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Elvis
Val: 209
Plata
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Elvis (102 intervenciones) el 27/10/2018 23:14:51
Bien gracias por el aporte... Antonio...
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
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Alejandro (10 intervenciones) el 28/10/2018 15:50:29
Antonio muchas gracias excelente solución y de gran utilidad para todos.
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 Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

JOIN CON CADENA DELIMITADA POR COMAS

Publicado por Antonio (13 intervenciones) el 29/10/2018 21:19:58
Por nada, aqu'i estoy para lo que necesiten!!
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