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...
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 originalSELECT MID(concat(ID),3,1), SUM(campoX)
FROM tutabla
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 originalSELECT LEFT(concat(ID),2), SUM(campoX)
FROM tutabla
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