Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/11/2010, 12:02
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: AYUDA!!! dividir una columna en varias

Buenos días jursco:

Se me ocurre que puedes hacer algo como lo siguiente:

Código MySQL:
Ver original
  1. #Creamos una tabla de prueba
  2. CREATE TABLE Tabla_Prueba (columna varchar(3));
  3.  
  4. #Insertamos los valores de prueba
  5.  
  6. insert into Tabla_Prueba values ('a1'), ('a2'),('a3'),('a4'),('a5'),('a6'),('a7'),('a8'),('a9'),('a10'),('a11'),('a12');
  7.  
  8. #Verificamos cómo se muestran los datos con un select normal
  9. SELECT * FROM Tabla_Prueba;
  10.  
  11. #'Dividimos' la columna en tres columnas y mostramos la consulta
  12. SELECT T1.COLUMNA, T2.COLUMNA, T3.COLUMNA FROM
  13. (
  14. SELECT @rownum:=@rownum+1 idRenglon, columna  
  15. FROM Tabla_Prueba, (SELECT @rownum:=0) R1 LIMIT 0, 4
  16. ) T1 INNER JOIN
  17. (
  18. SELECT @rownum2:=@rownum2+1 idRenglon, columna  
  19. FROM Tabla_Prueba, (SELECT @rownum2:=0) R2 LIMIT 4, 4
  20. ) T2 ON T1.idRenglon = T2.idRenglon
  21. (
  22. SELECT @rownum3:=@rownum3+1 idRenglon, columna  
  23. FROM Tabla_Prueba, (SELECT @rownum3:=0) R3 LIMIT 8, 4
  24. )T3 ON T1.idRenglon = T3.idRenglon;
  25.  
  26. #Borramos la tabla que creamos de ejemplo
  27. DROP TABLE Tabla_Prueba;

Lo que hace la consulta es seleccionar cada columna como una tabla, y asignarles un idRenglon, de tal manera que puedas hacer un INNER JOIN, es decir, las subconsultas te regresan algo como esto:

Código:
T1
idRenglon|Columna
-------------------------
1|a1
2|a2
3|a3
4|a4

T2
idRenglon|Columna
-------------------------
1|a5
2|a6
3|a7
4|a8

T3
idRenglon|Columna
-------------------------
1|a9
2|a10
3|a11
4|a12

Por lo tanto la salida queda de esta manera:
Código:
Col1|Col2|Col3
----------------------------
a1|a5|a9
a2|a6|a10
a3|a7|a11
a4|a8|a12
Como vez no hace falta utilizar ningún procedimiento almacenado y sólo estoy utilizando código SQL. Si quisieras más columnas se deberían hacer más subconsultas y para manejar el número de renglones a mostrar pues sería cuestión de cambiar los valores del LIMIT.

Como dices que manejas millones de registros no sé que tan conveniente sea hacer esto, es cuestión que lo pruebes y nos comentes. Puede ser que la consulta no sea la más óptima, pero fue lo primero que se me ocurrió.

Saludos
Leo.

------------------------------------
El ignorante afirma, el sabio duda y reflexiona
Aristóteles