Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/06/2009, 02:54
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 3 meses
Puntos: 574
Respuesta: Consulta compleja - ¿¿Es posible??

Lo primero que deberiamos hacer es poder tratar el ID como un texto para poder acceder a sus distintas partes...

Tenemos las funciones concat() y cast() para convertir integer a texto...

Código sql:
Ver original
  1. SELECT ID, concat(ID) FROM tutabla;

351001 '351001'
...

A partir de esto podemos trabajar como si fuera un string. Con las funciones apropiadas conseguiremos separar lo que nos interesa

LEFT() Return the leftmost number of characters as specified
MID() Return a substring starting from the specified position
SUBSTRING() Return the substring as specified
RIGHT() Return the specified rightmost number of characters

luego

Código sql:
Ver original
  1. SELECT MID(concat(ID),3,1), SUM(campoX)
  2. FROM tutabla
  3. GROUP BY MID(concat(ID),3,1);

esto sumará el valor del campoX para cada valor de la posicion 3 del ID, analogamente

Código sql:
Ver original
  1. SELECT LEFT(concat(ID),2), SUM(campoX)
  2. FROM tutabla
  3. GROUP BY LEFT(concat(ID),2);

esto sumara el campoX para cada valor de las dos primeras posiciones de ID.

Con estos dos resultados y el listado obetenido con


SELECT ID,... FROM TUTABLA

El problema se reduciria a mostrarlos combinados como quieras lo que no creo que te de problemas de memoria....


Obviamente tambien puedes usar

WHERE MID(concat(ID),3,1)=1

para filtrar...

Quim