Problema com conceito de Intervalos no Oracle

Tenho uma query(simples) na qual eu ordeno um gráfico pelo intervalo.Quando o intervalo está numa mesma faixa de valores numéricos,como entre 10 e 100, ou 100 e 1000, ele funciona OK, mas quando ele invade outras faixas, bagunça a ordenação de intervalos.
Para explicitar, olha isso:
Intervalo de 10(funciona OK):
http://img706.imageshack.us/img706/899/intervalovalor10.png

Intervalo de 40, vira uma bagunça(deveria ordenar no menor intervalo para o maior):
http://img834.imageshack.us/img834/8062/intervalovalor40.png

Para a consulta (exemplo para valor de 10 em 10):

SELECT INTERVAL, COUNT(*) TOTAL FROM (SELECT CASE WHEN NUM_CLIE_INT>0 AND NUM_CLIE_INT<=10.00 THEN '0<NUM_CLIE_INT><=10.00' WHEN NUM_CLIE_INT>10.00 AND NUM_CLIE_INT<=20.00 THEN '10.00<NUM_CLIE_INT><=20.00' WHEN NUM_CLIE_INT>20.00 AND NUM_CLIE_INT<=30.00 THEN '20.00<NUM_CLIE_INT><=30.00' WHEN NUM_CLIE_INT>30.00 AND NUM_CLIE_INT<=40.00 THEN '30.00<NUM_CLIE_INT><=40.00' WHEN NUM_CLIE_INT>40.00 AND NUM_CLIE_INT<=50.00 THEN '40.00<NUM_CLIE_INT><=50.00' WHEN NUM_CLIE_INT>50.00 THEN '50.00<NUM_CLIE_INT' END INTERVAL, NUM_CLIE_INT FROM SGD_CAUSA WHERE ANO=2012) GROUP BY INTERVAL HAVING INTERVAL IS NOT NULL ORDER BY INTERVAL

Alguém já mexeu com isso?>

Esse campo intervalo tá saindo como varchar, então ele tá aplicando a ordenação olhando pros números como se fossem alfanuméricos. Por isso que 40 tá vindo depois de 200… Duas soluções: ou nesses rótulos você define um número de dígitos fixo e completa com zeros à esquerda (o 40 ficaria 040 por exemplo) ou você cria um outro campo, usando o case mesmo, só que retornando valores numéricos. Daí sua ordenação poderia ser aplicada sobre esse outro campo, manjou ?

ADEMILTON,
que óbvio!Claro que lê como caractere!O chato é que eu não vou poder criar a outra variável numérica(que seria o correto), pois essa consulta tá sendo criada on-the-fly(dinamicamente), com parâmetros vindo de diferentes fontes.Valeu mesmo.
;]