Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Multiplicacion de dos campos dentro de un order by... (https://www.clubdelphi.com/foros/showthread.php?t=39854)

mcalmanovici 31-01-2007 17:03:41

Multiplicacion de dos campos dentro de un order by...
 
Hola; quiero ejecutar la siguiente sentencia en sql con el motor de base de datos firebird. Cuando ejecuto esto me sale el siguiente error:
Integer overflow. The result of an integer operation caused the most significant bit of the result to carry.

La sentencia es:
select I.COD_ITEM AS ARTICULO, I.DESCRIPCION, I.ABC, I.INV_SEGURIDAD AS PUNTO_PEDIDO, I.ORDER_MIN AS LOTE_ECON_COMPRA, TA.QTY AS CONSUMO, TA.UNIT_COST AS PRECIO_ULT_COMPRA,
TA.COST AS IMPORTE, TA.ACCUM AS IMPORTE_ACUM,
TA.PORCENTAJE, TA.ABC as ABC_CALCULADO,
I.LEAD_TIME, TA.UNIT_COST, TA.QTY
FROM ITEMS I JOIN TMP_ABC TA ON I.ID_EMPRESA = TA.ID_EMPRESA
and I.COD_ITEM = TA.COD_ITEM
LEFT JOIN CONSUMO C ON I.COD_ITEM = C.COD_ITEM and
I.ID_EMPRESA = C.ID_EMPRESA and
C.ANIO = extract(year from current_date)
order by (TA.QTY * TA.UNIT_COST)


Si a esta sentencia le saco la línea del order by funciona correctamente. Los campos TA.QTY y TA.UNIT_COST son de tipo "numeric (15,8)". Supongo que el error es porque son numeric los campos. Yo necesito ordenar la consulta de mayor a menor pro TA.QTY * TA.UNIT_COST.
Esta consulta la realizo desde el delphi para realizar un reporte.
También trate de que esta multiplicacion me la devuelva como un campo más para luego poder ordenar la consulta desde el data set de delphi pero tambien me tira el mismo error.
Si alguien sabe si existe otra forma de ordenar esto o que estoy haciendo mal, estaré agradecido.

Desde ya muchas gracias.
Mariano.

fdelamo 31-01-2007 17:28:37

No se si funcionará:

Código SQL [-]
select TA.QTY * TA.UNIT_COST as orden, I.COD_ITEM AS ARTICULO, I.DESCRIPCION, I.ABC, I.INV_SEGURIDAD AS PUNTO_PEDIDO, I.ORDER_MIN AS LOTE_ECON_COMPRA, TA.QTY AS CONSUMO, TA.UNIT_COST AS PRECIO_ULT_COMPRA,
TA.COST AS IMPORTE, TA.ACCUM AS IMPORTE_ACUM,
TA.PORCENTAJE, TA.ABC as ABC_CALCULADO,
I.LEAD_TIME, TA.UNIT_COST, TA.QTY
FROM ITEMS I JOIN TMP_ABC TA ON I.ID_EMPRESA = TA.ID_EMPRESA
and I.COD_ITEM = TA.COD_ITEM
LEFT JOIN CONSUMO C ON I.COD_ITEM = C.COD_ITEM and
I.ID_EMPRESA = C.ID_EMPRESA and
C.ANIO = extract(year from current_date)
order by 1

Bicho 31-01-2007 17:30:08

Hola, has probado algo como esto:

Código SQL [-]
select TA.QTY * TA.UNIT_COST, I.COD_ITEM AS ARTICULO, I.DESCRIPCION, I.ABC, I.INV_SEGURIDAD AS PUNTO_PEDIDO, I.ORDER_MIN AS LOTE_ECON_COMPRA, TA.QTY AS CONSUMO, TA.UNIT_COST AS PRECIO_ULT_COMPRA,
TA.COST AS IMPORTE, TA.ACCUM AS IMPORTE_ACUM,
TA.PORCENTAJE, TA.ABC as ABC_CALCULADO,
I.LEAD_TIME, TA.UNIT_COST, TA.QTY
FROM ITEMS I JOIN TMP_ABC TA ON I.ID_EMPRESA = TA.ID_EMPRESA 
and I.COD_ITEM = TA.COD_ITEM
LEFT JOIN CONSUMO C ON I.COD_ITEM = C.COD_ITEM and
I.ID_EMPRESA = C.ID_EMPRESA and
C.ANIO = extract(year from current_date)
order by 1

Espero te sirva.

Saludos

mcalmanovici 31-01-2007 17:37:38

No me funciono
 
Te comento que de esta forma no me funciono.. Sigue tirandome error en el TA.QTY * TA.UNIT_COST.
No si se te ocurre otra idea.
Gracias.

Cita:

Empezado por fdelamo
No se si funcionará:

Código SQL [-]select TA.QTY * TA.UNIT_COST as orden, I.COD_ITEM AS ARTICULO, I.DESCRIPCION, I.ABC, I.INV_SEGURIDAD AS PUNTO_PEDIDO, I.ORDER_MIN AS LOTE_ECON_COMPRA, TA.QTY AS CONSUMO, TA.UNIT_COST AS PRECIO_ULT_COMPRA, TA.COST AS IMPORTE, TA.ACCUM AS IMPORTE_ACUM, TA.PORCENTAJE, TA.ABC as ABC_CALCULADO, I.LEAD_TIME, TA.UNIT_COST, TA.QTY FROM ITEMS I JOIN TMP_ABC TA ON I.ID_EMPRESA = TA.ID_EMPRESA and I.COD_ITEM = TA.COD_ITEM LEFT JOIN CONSUMO C ON I.COD_ITEM = C.COD_ITEM and I.ID_EMPRESA = C.ID_EMPRESA and C.ANIO = extract(year from current_date) order by 1


fdelamo 31-01-2007 17:51:47

Prueba a hacer un cast as NUMERIC, o ha dividirlo antes de multiplicar:

(TA.QTY/1000000) * (TA.UNIT_COST/1000000)

mcalmanovici 31-01-2007 18:21:07

Asi si funciono
 
De esta forma si funciono...
Te agradezco mucho por tu tiempo.....

Saludos.
Muchas gracias de nuevo.
Mariano.
Cita:

Empezado por fdelamo
Prueba a hacer un cast as NUMERIC, o ha dividirlo antes de multiplicar:

(TA.QTY/1000000) * (TA.UNIT_COST/1000000)



La franja horaria es GMT +2. Ahora son las 16:16:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi