PDA

Ver la Versión Completa : Problema Con Un Query


Ing Harry
10-06-2005, 15:32:34
SALUDOS..

Me encuentro realizando el siguiente qry en Mysql

select c.cod_prov,d.descripcion,format((sum(case a.cod_movi when '1' then a.valor else 0 end)),2)"Venta Neta",
format((sum(case a.cod_movi when '2' then a.valor else 0 end)),2)"Devoluciones",
format((sum(case a.cod_movi when '1' then a.valor when'2' then a.valor*-1 else 0 end)),2)as total
from tbl_venta as a,tbl_artic as b,tbl_prov as c,tbl_nit as d
where a.cod_artic=b.cod_artic and b.cod_prov=c.cod_prov and c.nit=d.nit
and a.fecha between '2005-05-01' and '2005-05-31'
group by c.cod_prov,d.descripcion
order by total;

El resultado del mismo es el esperado, pero la funcion order by no me esta ordenando los datos. No se que esta pasando, si alguien sabe como puedo hacer para que el ordenamiento funcione se lo agradeceria enormemente.

Gracias por la atencion :cool: :cool:

Lepe
10-06-2005, 16:18:41
No sé si es una barbaridad, pero creo haber leido por los foros que tienes que usar:

order by (sum(case a.cod_movi when '1' then a.valor when'2' then a.valor*-1 else 0 end)


Suerte

Ing Harry
10-06-2005, 16:57:14
Saludos

Gracias por tus comentarios, pero tu sugerencia no funciona, agradezco tu colaboracion y quedo a la espera de mas comentarios.

lgarcia
10-06-2005, 20:17:17
Hola:

Me parece que en la sentencia que utilizas para el Order by debes incluir el format, o sea

format((sum(case a.cod_movi when '1' then a.valor when'2' then a.valor*-1 else 0 end)),2)

Espero te sirva

Saludos
Luis Garcia

maeyanes
10-06-2005, 20:49:32
Yo en Interbase he usado:

select Campo1, Cast(Campo2, Integer) from Tabla
order by 2

Ahí le estoy indicando la columna que quiero que use para ordenar de acuerdo a su número. Lo que no se si esto solo sirva en Interbase.

Pruebalo a ver si te sirve.


Saludos...

Ing Harry
11-06-2005, 00:25:27
Nada, no funciona, las cosas siguen iguales, habra que seguir investigando, pero creo que esto esta demasiado misterioso no creen. Me doy cuenta que muchos han visto este hilo asi que les agradezco me colaboren para adquirir este conocimiento al parecer el problema esta dado por el uso del case.

Gracias estamos en contacto

jachguate
11-06-2005, 01:23:53
En este momento no logro recordar si mysql soporta lo que voy a sugerirte.. pero quien quita y funcione.


Select q1.cod_prov, q1.Total
from (select c.cod_prov,
sum(case a.cod_movi when '1' then a.valor when'2' then a.valor*-1 else 0 end) total
from tbl_venta a, /* etcetera */
) q1
order by q1.Total;


En la jerga de oracle, esto se llama inline views... no se cómo se llama en otras jergas.. :D

Hasta luego.

;)

vtdeleon
11-06-2005, 03:24:37
Saludos

No se mucho de sentencias SQl pero ...when'2' when y '2'
estan pegados. FUnciona asi?

jachguate
11-06-2005, 03:53:06
Bueno, eso depende del tokenizer del motor de la base de datos, pero yo diría que debe funcionar. En todo caso, yo lo copié del mensaje original de Harry.. :D

Ing Harry
14-06-2005, 00:51:26
Saludos..


Bueno les cuento que ya pude corregir el problema. A decir verdad el causante del inconveniente fue la funcion format, pues deje de usarla y el ordenamiento quedo ok. Como este query lo estaba usando para poder generar un reporte, lo que hice fue dejarle el formateo del mismo al quickreport.

De todas maneras queda la duda al momento de usar el format, pues no nos permite ordenar. Agradezco la atencion prestada y los comentarios recibidos, todos fueron muy utiles.


Atentamente
ING HARRY :D :D :D