Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/07/2010, 09:02
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 11 meses
Puntos: 574
Respuesta: Consulta a dos columnas

Mi consulta lo único que hace es ordenar por el campo CAMBIA pero forzando que cuando este sea nulo aparezca al final de la ordenación, se convierte el nulo en 1 y el no nulo en 0 con lo que consigues que los nulos aparezcan después de los no nulos....

If(TuTabla.cambia IS NULL,1,0)

con los datos de ejemplo da exactamente lo que pides....

Con mas datos seguramente no obtendrás lo que buscas, la respuesta quizás fue demasiado rápida, funcionaria si como en el ejemplo tenemos la "vida" de un solo parte.




DESCRIPCION NPARTE CAMBIA
RODAMIENTO 30-62699 30-20839
RODAMIENTO 30-20839 30-20839T
RODAMIENTO 30-20839T
RODAMIENTO 30-62700 30-20840
RODAMIENTO 30-20840





NPARTE CAMBIA
30-62699 30-20839
30-20839 30-20839T
30-62700 30-20840
30-20840
30-20839T


Introduciendo mas datos no da lo esperado...


La solución de jurena si la desarrollas hasta los 10 posibles cambios te dará lo que buscas en un registro (no en columna, eso seria un problema menor) pero solo para un parte dado, no para la tabla entera... y si el máximo de 10 cambios es un máximo aproximado, es decir que rara vez se superen los 10 cambios esa rara vez no te dará lo que buscas...

Sin haber dado muchas vueltas al tema y con el diseño que tienes, la de jurena, es quizás la única solución, desarrollada hasta los 10 cambios y indexando los campos nparte y cambia por separado o juntos en un índice compuesto.... habría que ver como responde... recuerda que puedes forzar el uso de índices 12.2.8.2. Index Hint Syntax

Código MySQL:
Ver original
  1. SELECT t1.NPARTE, t2.NPARTE, t3.NPARTE, t4.NPARTE, t5.NPARTE, t6.NPARTE, t7.NPARTE, t8.NPARTE, t9.NPARTE, t10.NPARTE
  2. FROM (((((((((tabla AS t1 LEFT JOIN tabla AS t2 ON t1.CAMBIA = t2.NPARTE)
  3.  LEFT JOIN tabla AS t3 ON t2.CAMBIA = t3.NPARTE)
  4. LEFT JOIN Tabla t4 ON t3.CAMBIA = t4.NPARTE)
  5. LEFT JOIN Tabla t5 ON t4.CAMBIA = t5.NPARTE)
  6. LEFT JOIN Tabla t6 ON t5.CAMBIA = t6.NPARTE)
  7. LEFT JOIN Tabla t7 ON t6.CAMBIA = t7.NPARTE)
  8. LEFT JOIN Tabla t8 ON t7.CAMBIA = t8.NPARTE)
  9. LEFT JOIN Tabla t9 ON t8.CAMBIA = t9.NPARTE)
  10. LEFT JOIN Tabla t10 ON t9.CAMBIA = t10.NPARTE)
  11. WHERE (((t1.NPARTE)="30-62699"));

t1.NPARTE t2.NPARTE t3.NPARTE t4.NPARTE t5.NPARTE t6.NPARTE t7.NPARTE t8.NPARTE...
30-62699 30-20839 30-20839T


Si eliminas el WHERE para obtener toda la tabla daria esto

t1.NPARTE t2.NPARTE t3.NPARTE t4.NPARTE t5.NPARTE t6.NPARTE t7.NPARTE t8.NPARTE...
30-62699 30-20839 30-20839T
30-20839 30-20839T
30-20839T
30-62700 30-20840
30-20840


Suerte


Quim

Última edición por quimfv; 28/07/2010 a las 09:19