Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta complicada

Estas en el tema de Consulta complicada en el foro de SQL Server en Foros del Web. Hola a todos. Espero que alguine me pueda echar una mano. Tengo que hacer una consulta en la que me salgan varios datos de varias ...
  #1 (permalink)  
Antiguo 27/09/2006, 05:20
 
Fecha de Ingreso: septiembre-2006
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
Consulta complicada

Hola a todos.

Espero que alguine me pueda echar una mano.

Tengo que hacer una consulta en la que me salgan varios datos de varias tablas.
Mi mayor problema es poder meter en la misma sentencia sql

La suma de los valores de la tabla ingresos y
La suma de los valores de la tabla compras

Lo ideal sería hacer dos consultas independientes y poder unirlas en el mismo resultado por el id de cliente.

el resutlado debería ser:

id_cli, total_ingresos, total_gastos

he probado inner join,

he probado select ingresos.id_cli, sum(ingresos), sum gastos form ingresos,gastos where ingresos.id_cli=gastos.id_cli group by id_cli

pero nada de lo que se me ocurre suma bien

las cantidades.

Gracias anticipadas.
  #2 (permalink)  
Antiguo 27/09/2006, 08:05
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
no creo que sea conveniente unir dos tablas cuando no tienen relacion...
es decir... un cliente, puede tener ingresos y no necesariamente egresos... y a la viceversa....
por lo que seria mejor involucrar la tabla de clientes y apartir de ahi hacer left joins a las tablas de gastos e ingresos... asi te aseguras que estaran todos los clientes y las sumas estaran correctas...
  #3 (permalink)  
Antiguo 27/09/2006, 08:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
Muchas gracias por tu ayuda.

Si que me ha servido lo que me has dicho pero tambien necesito poner condiciones a la hora de la suma de los ingresos (o gastos)

Es decir, ahora tengo:

select c.id_cli, Sum(i.ingresos) from clientes c left join ingresos i on i.id_cli=c.id_cli
group by id_cli

pero necesito que para la suma sólo coja los que tienen iva <> 0

lo he intentado poner en la clausula having, pero no me deja, y creo que con join no se puede poner where.

Me puedes decir como hacerlo?

Gracias otra vez
  #4 (permalink)  
Antiguo 27/09/2006, 08:52
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
si puedes poner el where incluso tambien puedes poner la condicion en el join, depende de la solicitud de la consulta

Código:
select c.id_cli, Sum(i.ingresos) 
from clientes c 
left join ingresos i on c.id_cli=i.id_cli and i.iva <> 0
group by id_cli

Última edición por Andres95; 27/09/2006 a las 09:01
  #5 (permalink)  
Antiguo 27/09/2006, 08:59
 
Fecha de Ingreso: septiembre-2006
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
ah si?
pues lo he probado pero no me deja. Dice que la expresion de combinacion no esta admitida...

select c.id_cli, Sum(i.ingresos)
from clientes c
left join ingresos i on c.id_cli=i.id_cli and i.iva <> 0
group by id_cli


A lo mejor con el where sí que me dejaría, pero no he conseguido averiguar dónde se coloca.

Última edición por Deixis; 27/09/2006 a las 09:09
  #6 (permalink)  
Antiguo 27/09/2006, 09:57
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
pues si esta raro... tal vez si le pones > 0 ... de que tipo es tu campo iva?
  #7 (permalink)  
Antiguo 27/09/2006, 19:49
Avatar de hvaldez  
Fecha de Ingreso: abril-2006
Ubicación: Xalapa Veracruz
Mensajes: 15
Antigüedad: 18 años
Puntos: 0
select clientes.id_cli, sum(ingresos.ingresos) as ingreso,
sum(compras.compras) as compra
from clientes left join ingresos on clientes.id_cli = ingresos.id_cli left join compras on clientes.id_cli = compras.id_cli
where ingresos.iva <> '0'
group by clientes.id_cli
  #8 (permalink)  
Antiguo 28/09/2006, 01:12
 
Fecha de Ingreso: septiembre-2006
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
Gracias hvaldez, lo del where me funciona perfectamente.

Ahora lo que pasa (y no entinedo por que) es que si pongo sólo

select c.id_cli, sum(ingresos.ingresos) from clientes left join ingresos on c.id_cli=ingresos.id_cli

la suma de los ingresos sale perfectamente, pero en cuanto añado la columna de compras

select c.id_cli, sum(ingresos.ingresos), sum(compras.compras) from (clientes left join ingresos on c.id_cli=ingresos.id_cli) left join compras on compras.id_cli=c.id_cli
group by id_cli

La suma de ingresos cambia de valores (exactamente la suma multiplicada por un numero, que cambia para cada cliente) y la suma de las compras funciona bien, es decir, que solo calcula bien la columna que queda mas a la derecha.

Se puede arreglar esto?

Gracias de nuevo.

Última edición por Deixis; 04/10/2006 a las 02:12
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:53.