Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   sumar campos de resultados subconsultas (http://www.forosdelweb.com/f21/sumar-campos-resultados-subconsultas-592484/)

bitshoot 02/06/2008 08:11

sumar campos de resultados subconsultas
 
Hola a todos, tengo una duda y es la sigueinte.
resulta que necesito saber si es posible sumar (o restar) dos campos que los obtengo de una subconsulta... estos campos son los marcados en negrita.

SELECT datos_empleado.nombre, datos_empleado.rut,
(SELECT SUM(ansubl_i01 + ... subsil_i12) FROM anticipos
WHERE datos_empleado.rut = anticipos.rut) AS subsidios,
(SELECT SUM(montoco) FROM datos_pagos
WHERE datos_empleado.rut = datos_pagos.rut) AS pagos,
(SELECT SUM(deslic_i01 + .. deslic_i12)
FROM anticipos
WHERE datos_empleado.rut = anticipos.rut
) AS cobros
FROM datos_empleado

en algun momento intente algo como:

sum(cobros + pagos), pero me daba error... no estoy seguro que se pueda hacer algo asi... alguien me podria ayudar... de ante mano se agradece toda ayuda...

terepaima 02/06/2008 08:16

Respuesta: sumar campos de resultados subconsultas
 
Hola

Es imperativo que tengas que hacer la suma en el query?

No la puedes hacer al momento de presentar los datos?

seyko 02/06/2008 08:29

Respuesta: sumar campos de resultados subconsultas
 
select nombre, rut, subsidios, pagos, anticipos-cobros as pendiente from (


SELECT datos_empleado.nombre, datos_empleado.rut,
(SELECT SUM(ansubl_i01 + ... subsil_i12) FROM anticipos
WHERE datos_empleado.rut = anticipos.rut) AS subsidios,
(SELECT SUM(montoco) FROM datos_pagos
WHERE datos_empleado.rut = datos_pagos.rut) AS pagos,
(SELECT SUM(deslic_i01 + .. deslic_i12)
FROM anticipos
WHERE datos_empleado.rut = anticipos.rut
) AS cobros
FROM datos_empleado

) foo

Un saludo

seyko 02/06/2008 08:31

Respuesta: sumar campos de resultados subconsultas
 
Bueno ahora dejando de lado lo que querias hacer, esa select con subselects la podrias hacer con JOIN, SUM y GROUP BY y sería mucho más eficiente.

Salu2

bitshoot 02/06/2008 08:38

Respuesta: sumar campos de resultados subconsultas
 
tengo que sumar en la consulta ya que tengo que lograr ordenar los datos (en la presnetacion) en orden > a < y < a > y se me hace mas facil hacerlo de esa forma... puedo estar en un error el cual me lo indican y lo discutimos...
bueno intentare implementar la solucion propuesta y ver que tal me va con los Join o Gruop by... por que son mas optimas estas soluciones que?

jurena 02/06/2008 09:04

Respuesta: sumar campos de resultados subconsultas
 
prueba esto:
quita los alias de cada uno, pon los signos + o - entre ellos (yo los he puesto a ojo, para que veas cómo van), como en el ej. y pon un alias al final.
SELECT datos_empleado.nombre, datos_empleado.rut,
(SELECT SUM(ansubl_i01 + subsil_i12) FROM anticipos
WHERE datos_empleado.rut = anticipos.rut) + (SELECT SUM(montoco) FROM datos_pagos
WHERE datos_empleado.rut = datos_pagos.rut) - (SELECT SUM(deslic_i01 + deslic_i12)
FROM anticipos
WHERE datos_empleado.rut = anticipos.rut
) AS TOTAL
FROM datos_empleado

EDITO: esto puede ser una solución, pero no es lo mejor: te hago la misma recomendación que Seyko.

bitshoot 02/06/2008 09:27

Respuesta: sumar campos de resultados subconsultas
 
sEIKO, si quiero darle un ORDER BY donde lo incluyo?

SELECT datos_empleado.nombre, datos_empleado.rut,
(SELECT SUM(ansubl_i01 + ... subsil_i12) FROM anticipos
WHERE datos_empleado.rut = anticipos.rut) AS subsidios,
(SELECT SUM(montoco) FROM datos_pagos
WHERE datos_empleado.rut = datos_pagos.rut) AS pagos,
(SELECT SUM(deslic_i01 + .. deslic_i12)
FROM anticipos
WHERE datos_empleado.rut = anticipos.rut
) AS cobros
FROM datos_empleado
WHERE Fecha_ret = '01/01/3000'
ORDER BY subsidios ASC
) foo

me da error con order by:
The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.

porque ocurre este error y como lo evito?

saludos y gracias por los aportes.

seyko 03/06/2008 02:41

Respuesta: sumar campos de resultados subconsultas
 
La clausula de order by siempre va al final
....
) foo
order by ...

Es más eficiente que las subconsultas, porque por cada registro que saques se hace una subconsulta, tu tienes 3 subconsultas dentro de tu select, si tienes 1000 registros tiras 3001 consultas.

salu2


La zona horaria es GMT -6. Ahora son las 07:03.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.