Siempre y cuando sepas el nº de 'grupos' de registros que tengas que calcular, podrías hacer una select con UNION. Para realizarla necesitas que todas las querys que unas devuelvan los mismos campos, que creo que es el caso.
Ejemplo, los grupos son de 1, 2 y tres caracteres:
A
A1 -> A11, A12, A13
A11 -> A111, A112, A113
Código SQL
[-]
SELECT substr(codigo,1,1) AS codigo, sum(cant1), sum(cant2) from X
group by codigo
UNION
SELECT substr(codigo,1,2) AS codigo, sum(cant1), sum(cant2) from X
group by codigo
UNION
SELECT substr(codigo,1,3) AS codigo, sum(cant1), sum(cant2) from X
group by codigo
Si no sabes cuantos 'grupos' tienes, siempre puedes hacer unas querys previamente para calcularlos, es decir
Código SQL
[-]select distinct length(codigo) as grupo from x order by grupo
te devolverá el nº de selects que tendrás que preparar.
Espero no haber sido muy espeso, es por la hora....
Suerte y un saludo
PD: No se que motor de BBDD usas, pero no creo que tengas problemas para adaptarlo