Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Copiar data al costado dado un código único

Estas en el tema de Copiar data al costado dado un código único en el foro de Oracle en Foros del Web. Hola, soy nuevo en el foro, quisiera que me ayudaran con un problema que tengo. Lo que pasa es que tengo una tabla con cierta ...
  #1 (permalink)  
Antiguo 10/03/2010, 13:48
 
Fecha de Ingreso: marzo-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Exclamación Copiar data al costado dado un código único

Hola, soy nuevo en el foro, quisiera que me ayudaran con un problema que tengo.
Lo que pasa es que tengo una tabla con cierta información de clientes, por ejemplo asi:

Codigo---------Codigo_dep-------------------Telefono
1---------------------01---------------------11111
1---------------------02---------------------22222
1---------------------03---------------------33333
2---------------------04---------------------44444
2---------------------05---------------------55555

Quisiera crear una tabla que me acomode esta información de la siguiente manera:

Codigo----Codigo_dep1----Telefono1----Codigo_dep2----Telefono2----Codigo_dep3----Telefono3
1-----------------01-------11111------------02-------22222------------03-------33333
2-----------------04-------44444------------05-------44444


Estaba pensando usar cursores pero no se mucho de ello, y no llegue a nada. Por el numero de columnas que se crearian no hay problema porque a lo mucho serian 3 telefonos diferentes que tendria el cliente
Cualquier ayuda es bienvenida. Gracias.
  #2 (permalink)  
Antiguo 11/03/2010, 07:39
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Copiar data al costado dado un código único

Hola que tal, sin cursores se me ocurriria algo asi, pero ojo, no te lo va a separar por campos sino por comas.

Código:
SELECT
   codigo, 
   rtrim (xmlagg (xmlelement (e,codigo_dep || ',')).extract ('//text()'), ',') codigo_dep,
   rtrim (xmlagg (xmlelement (e, telefono || ',')).extract ('//text()'), ',') telefono   
FROM   x
GROUP BY  codigo
Y el resultado es asi
Código:
codigo codigo_dep  telefono
   1     3,2,1     3333,2222,1111
   2     5,4       5555,4444
Con unos instr y unos substring logras separarlos en campos. Pero deben existir muchas mas formas menos rebuscadas que esta para lograr lo que quieres. Esto se me ocurrio ahorita.

Si se me ocurre algo en el transcurso del dia lo coloco.

Saludos.
  #3 (permalink)  
Antiguo 11/03/2010, 08:21
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Copiar data al costado dado un código único

En este post:

http://www.forosdelweb.com/f100/func...record-783668/

Hay una función creada por mi, creala tal cual en tu bd. Se llama gettoken (No te la coloque aqui para no andar repitiendo el post).

Una vez compilada en tu bd, podras hacer esto

Código:
SELECT
   codigo, 
   gettoken(rtrim (xmlagg (xmlelement (e,codigo_dep || ',')).extract ('//text()'), ','),1,',') cod_dept1 ,
   gettoken(rtrim (xmlagg (xmlelement (e, telefono || ',')).extract ('//text()'), ','),1,',') telefono1, 
   gettoken(rtrim (xmlagg (xmlelement (e,codigo_dep || ',')).extract ('//text()'), ','),2,',') cod_dept2 ,
   gettoken(rtrim (xmlagg (xmlelement (e, telefono || ',')).extract ('//text()'), ','),2,',') telefono2 ,
   gettoken(rtrim (xmlagg (xmlelement (e,codigo_dep || ',')).extract ('//text()'), ','),3,',') cod_dept3 ,
   gettoken(rtrim (xmlagg (xmlelement (e, telefono || ',')).extract ('//text()'), ','),3,',') telefono3    
FROM   x
GROUP BY  codigo

Y eso te va a retornar los datos exactamente como quieres.

La gettoken sirve para manejar strings y conseguir datos especificos segun un delimitador, en este caso hablamos de una coma (,).

El resultado seria este:

Código:
CODIGO	COD_DEPT1	TELEFONO1	COD_DEPT2	TELEFONO2	COD_DEPT3	TELEFONO3
1	    3	          3333	           2	          2222	            1	           1111
2	    5	          5555	           4	          4444
Lo podrias ordenar y manejarlo como quieras.

Saludos y espero que te sirva

PD. Se acepta karma

Etiquetas: copiar, dado, data
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.