Fecha y hora actual: Miércoles 23 May 2018 08:15
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

No se como hacerlo

Responder al Tema

Índice del Foro > SQL - Lenguaje SQL > No se como hacerlo

Autor Mensaje
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Lunes 10 Feb 2014 11:34

Título del mensaje: No se como hacerlo

Responder citando

Hola, me estoy volviendo loco intentando sacarlo y casi está...os comento:

Tengo 2 tablas:

- RC: (Guarda Presupuestos anuales)
Aplicacion Presupuesto Año Grupo
120.01 10.000,00 2014 001
120.02 30.000,00 2014 001
150.01 10.500,00 2014 001

- AD: (Guarda Presupuestos mensuales)
Aplicacion Presupuesto Año Grupo Mes
120.01 1.000,00 2014 001 Enero
120.01 2.000,00 2014 001 Febrero
120.02 500,00 2014 001 Enero
150.01 1.500,00 2014 001 Enero
160.00 3.200,50 2014 001 Enero

Lo que quiero es sacar lo que queda del presupuesto anual al restarle los presupuestos mensuales.
Esto es lo que tengo:
SELECT AD.Aplicacion, SUM(IIF(ISNULL(RC.Presupuesto),0,RC.Presupuesto) - AD.Presupuesto)As Restante FROM AD LEFT JOIN RC ON AD.Aplicacion = RC.Aplicacion WHERE AD.Año='2014' AND AD.Grupo='001' GROUP BY AD.Aplicacion;

Pero con esto me pilla las aplicaciones del RC tantas veces cómo las haya en AD.

En este ejemplo:

- La aplicaión 120.01 del año 2014 debería quedar:
7.000,00
- Y lo que me sale a mi es:
17.000,00

ANOTACIóN: El "IIF(ISNULL" es porque una Aplicación Presupuestaria puede estar en el mensual y no en el anual(se que suena raro ya que por lógica sería al revés xD) (esta si me las hace bien quedando la cantidad en negativo, solo lo hace mal cuando la aplicación presupuestaria esta en las 2 tablas (en RC son únicas y en AD habrá varias).

Gracias ! ! !

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pico
Usuario Activo


Registrado: 25 Jun 2013
Mensajes: 628

Mensaje Publicado: Lunes 10 Feb 2014 11:56

Título del mensaje: No se como hacerlo

Responder citando

¿Será que tienes que usar distinct?

Volver arriba
Ver perfil del usuario Enviar mensaje privado
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Lunes 10 Feb 2014 12:02

Título del mensaje: No se como hacerlo

Responder citando

Pico escribió:
¿Será que tienes que usar distinct?

Si te refieres a esto:

SELECT DISTINCT AD.Aplicacion, SUM(IIf(ISNULL(RC.Presupuesto),0,RC.Presupuesto)-AD.Presupuesto) AS Restante
FROM AD LEFT JOIN RC ON AD.Aplicacion=RC.Aplicacion
WHERE AD.Año='2014' And AD.Grupo='001'
GROUP BY AD.Aplicacion;

... Ya lo había probado y el resultado sigue siendo el mismo.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pico
Usuario Activo


Registrado: 25 Jun 2013
Mensajes: 628

Mensaje Publicado: Lunes 10 Feb 2014 12:40

Título del mensaje: No se como hacerlo

Responder citando

Casi, porque ahí has puesto el distinct en una consulta nada más, cuando te interesa en la segunda.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Lunes 10 Feb 2014 14:02

Título del mensaje: No se como hacerlo

Responder citando

Pues no conozco otro sitio o forma de ponerlo, mis conocimientos de SQL son muy limitados.
Seguiré probando, pero no doy con ello con los conocimientos que yo tengo, no es que no haya probado esto o aquello...simplemente no se hacerlo y por eso pido ayuda.

Gracias ! ! !

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pico
Usuario Activo


Registrado: 25 Jun 2013
Mensajes: 628

Mensaje Publicado: Lunes 10 Feb 2014 14:05

Título del mensaje: No se como hacerlo

Responder citando

http://www.daniweb.com/web-development/databases/mysql/threads/413555/how-do-i-use-distinct-inside-inner-join

Creo que donde necesitas el distinct es en el join.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Martes 11 Feb 2014 10:48

Título del mensaje: No se como hacerlo

Responder citando

[quote=
Creo que donde necesitas el distinct es en el join.[/quote]
Lo que me has pasado no se corresponde con lo que dices, el tío pone una pregunta con el Distinct en el Join, pero le responden otra cosa.

He estado buscando por google pero no me aclaro, he intentado lo siguiente (entre otras cosas):

SELECT AD.Aplicacion, SUM(IIf(ISNULL(RC.Presupuesto),0,RC.Presupuesto)- (SELECT DISTINCT AD.Presupuesto FROM AD)) AS Restante
FROM AD LEFT JOIN RC ON AD.Aplicacion=RC.Aplicacion
WHERE AD.Año='2014' And AD.Grupo='001'
GROUP BY AD.Aplicacion;

Pero me da error diciendo que sólo generara un registro.

Estoy muy perdido en el laberinto y no encuentro la salida.

Salu2:) ! ! !

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pico
Usuario Activo


Registrado: 25 Jun 2013
Mensajes: 628

Mensaje Publicado: Martes 11 Feb 2014 11:09

Título del mensaje: No se como hacerlo

Responder citando

No era ese el enlace que quería poner y ahora no encuentro el otro.

Lo que creo es que el problema te lo soluciona un distinct pero no donde lo has puesto. En el ejemplo que has puesto está en la tabla AD y creo que tiene que estar en la RC. Dices que quieres sacar lo que queda del presupuesto anual al restarle los presupuestos mensuales. Eso es un select de RC, no de AD, y a ese select de RC, le pones el distinct, y yo diría que lo tienes conseguido.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Martes 11 Feb 2014 11:17

Título del mensaje: No se como hacerlo

Responder citando

Pico escribió:
No era ese el enlace que quería poner y ahora no encuentro el otro.

Lo que creo es que el problema te lo soluciona un distinct pero no donde lo has puesto. En el ejemplo que has puesto está en la tabla AD y creo que tiene que estar en la RC. Dices que quieres sacar lo que queda del presupuesto anual al restarle los presupuestos mensuales. Eso es un select de RC, no de AD, y a ese select de RC, le pones el distinct, y yo diría que lo tienes conseguido.

Si, tienes razón, debe de ser de RC ya que es el valor que me suma varias veces, pero no se cómo ponerlo como me dices.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
SAPeT,Dj



Registrado: 10 Feb 2014
Mensajes: 6

Mensaje Publicado: Martes 11 Feb 2014 11:50

Título del mensaje: No se como hacerlo

Responder citando

Ya tengo una solución, me ha ayudado un compañero del curro...

SELECT R.APLICACION,(R.PRESUPUESTO-T.SUMA) AS DIFERENCIA FROM (SELECT AD.Aplicacion,SUM(AD.PRESUPUESTO) AS SUMA
FROM AD
WHERE ((AD.Año)='2014') AND ((AD.Grupo)='001') GROUP BY AD.APLICACION) AS T, RC AS R WHERE T.APLICACION=R.APLICACION

Con esta me hace las cuentas bien, aunque no me saca los que están en AD que no están en RC, pero se me ha ocurrido hacerlo en otra consulta para ponerlo en otro datagridview para llevar un mejor control sobre ello.

Se puede cerrar ! ! !

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 1 Hora

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

AYUDA: COMO RECONECTO VB6 A MYSQL SIN PERDER LA...

rjaguin Visual Basic y VBA 0 Miércoles 09 May 2018 21:27 Ver último mensaje
El foro no contiene ningún mensaje nuevo

[C] Como se libera la memoria en estructura din...

DanielC C, C#, Visual C++ 1 Miércoles 11 Ene 2017 21:32 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Como saber que una base de datos fue modificada...

yoannepd SQL Server 1 Martes 10 Ene 2017 21:08 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Como saber que una base de datos fue modificada...

yoannepd ASP, ASP.NET 0 Martes 10 Ene 2017 21:04 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Como seleccionar parte de un código de barras p...

falken0001 Visual Basic y VBA 0 Martes 20 Dic 2016 22:17 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,