Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 02-jun-2008, 08:11   #1 (permalink)
bitshoot ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 361
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...
bitshoot está desconectado   Responder Citando
Antiguo 02-jun-2008, 08:16   #2 (permalink)
terepaima ha deshabilitado el karma
 
Avatar de terepaima
 
Fecha de Ingreso: junio-2008
Mensajes: 82
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?
terepaima está desconectado   Responder Citando
Antiguo 02-jun-2008, 08:29   #3 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.005
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 está desconectado   Responder Citando
Antiguo 02-jun-2008, 08:31   #4 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.005
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
seyko está desconectado   Responder Citando
Antiguo 02-jun-2008, 08:38   #5 (permalink)
bitshoot ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 361
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?
bitshoot está desconectado   Responder Citando
Antiguo 02-jun-2008, 09:04   #6 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 589
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.

Última edición por jurena; 02-jun-2008 a las 09:17.
jurena está desconectado   Responder Citando
Antiguo 02-jun-2008, 09:27   #7 (permalink)
bitshoot ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 361
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.
bitshoot está desconectado   Responder Citando
Antiguo 03-jun-2008, 02:41   #8 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.005
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
seyko está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 20:39.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93