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

consulta compleja

Estas en el tema de consulta compleja en el foro de SQL Server en Foros del Web. Hola a todos: Soy nuevo en el foro y me gustaria saber si me pueden ayudar con una consulta sql . Explico: tengo 4 tablas ...
  #1 (permalink)  
Antiguo 14/02/2012, 08:26
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Pregunta consulta compleja

Hola a todos:

Soy nuevo en el foro y me gustaria saber si me pueden ayudar con una consulta sql .

Explico: tengo 4 tablas , socios, vales, cuotasvales y pedidos

tabla socio :Rut, nombre, ap_patero, Ap materno, ...
tabla vales: id_vale,id_empresa,monto,saldo,fecha...
tabla cuotasvales: idvale,saldo,fecha....
tabla pedidos: id_pedidos,rut,monto,saldo,fecha....

La consulta debe mostrar el nombre completo del socio , el rut, la suma de las cuotas de vales y la suma de pedidos, (separados por id_de empresa) de cada socio en una periodo determinado.

y esta es la consulta que estoy utilizando

SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha, Sum(pedidos.saldo) AS SumaDesaldo
FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha
HAVING (((pedidos.fecha)>='$fechaini') AND ((Sum(pedidos.saldo))>0))


Esta consulta me muestra los datos asi:

rut nombre saldo

11111111-1 Eduardo Montero 10000
11111111-1 Eduardo Montero 20000
11111111-1 Eduardo Montero 30000
22222222-2 Juan Perez 10000
22222222-2 Juan Perez 20000

y lo que quiero que me muestre es

rut nombre saldo

11111111-1 Eduardo Montero 60000
22222222-2 Juan Perez 30000


de ante mano gracias por el tiempo y disculpas por alguna falta que aya cometido


Eduardo Montero
  #2 (permalink)  
Antiguo 14/02/2012, 08:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: consulta compleja

SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, Sum(pedidos.saldo) AS SumaDesaldo
FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat
HAVING (((pedidos.fecha)>='$fechaini') AND ((Sum(pedidos.saldo))>0))

Prueba asi :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/02/2012, 16:57
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: consulta compleja

gracias por la respuesta , pero me aparece el siguiente error al colocar la consulta que me has sugerido

Unknown column 'pedidos.fecha' in 'having clause'


al modificar de la siguente forma me pasa lo mismo que explique anteriormente

SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, Sum(pedidos.saldo) AS SumaDesaldo
FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.fecha
HAVING (((pedidos.fecha)>='$fechaini') AND ((Sum(pedidos.saldo))>0))
  #4 (permalink)  
Antiguo 14/02/2012, 17:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: consulta compleja

bueno si lo quieres mas facil:


select rut, nombre,sum(saldo) as saldo from(
SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha, Sum(pedidos.saldo) AS SumaDesaldo
FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha
HAVING (((pedidos.fecha)>='$fechaini') AND ((Sum(pedidos.saldo))>0))
) t1 group by rut,nombre


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 15/02/2012, 09:36
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: consulta compleja

muchas gracias por la respuesta , disculpa mi ignorancia pero me aparece el siguiente error

Unknown column 'saldo' in 'field list'

ayuda por favor, gracias


ya encontre la solucion gracias te pasate me salvaste !!!!
  #6 (permalink)  
Antiguo 15/02/2012, 09:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: consulta compleja

este...........

Código SQL:
Ver original
  1. SELECT rut, nombre,SUM(SumaDesaldo) AS saldo FROM(
  2. SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha, SUM(pedidos.saldo) AS SumaDesaldo
  3. FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
  4. GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha
  5. HAVING (((pedidos.fecha)>='$fechaini') AND ((SUM(pedidos.saldo))>0))
  6. ) t1 GROUP BY rut,nombre

Sorry My mistake i forgot change the name of the calculate field, try with this new query and let me know the results.

Regards,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 16/02/2012, 12:16
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: consulta compleja

muchas gracias pude conseguir la consulta tal como la necesitaba , disculpa por abusar de tu ayuda pero trate de hacer una consulta tomando la que tú me diste como base pero me aparece los datos cuatro veces cada uno. esta es la consulta

select rut,nombre,nombempr ,ap_pat, saldo, mes, sum(SumaDemonto) as monto from (SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, vales.id_vale, cuotas.saldo, cuotas.mes, empresa.nombempr, cuotas.monto, Sum(cuotas.monto) AS SumaDemonto
FROM socios INNER JOIN vales ON socios.rut = vales.rut, cuotas INNER JOIN empresa ON cuotas.id_empresa = empresa.id_empresa
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, vales.id_vale, cuotas.saldo, cuotas.mes, cuotas.monto, empresa.nombempr
HAVING (((cuotas.saldo)>"0") AND ((cuotas.mes)="Enero")) ) t1 group by
rut,nombre,nombempr ,ap_pat, saldo, mes;


gracias de nuevo y disculpa las molestias!!
  #8 (permalink)  
Antiguo 16/02/2012, 12:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: consulta compleja

en tu query tienes varios campos que no se pueden agrupar en este caso saldo y no se mes, que quiere decir que no se pueden agrupar, que estos campos por ejemplo saldo traen valores diferentes 1000,2000 y 3000 asi que si haces un select saldo, sum(saldo) from tabla group by saldo te va a regresar

saldo suma
1000 6000
2000 6000
3000 6000

quita esos campos que traen resultados que no se pueden agrupar y quedara tu consulta :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 17/02/2012, 06:06
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: consulta compleja

Gracias por la respuesta.

Pero como lo debo hacer entonces si lo que necesito que me dvuelva es lo siguiente:


Rut------------Nombre--------Empresa---------Saldo
11111-1------Eduardo--------Calzado----------50000
11111-1------Eduardo--------Ropa-------------60000
22222-2------Raul------------calzado----------100000
22222-2------Raul------------Ropa-------------120000

Que es la suma de los vales de cada socio , de cada empresa , en un determinado mes Enero, Febrero,Marzo e incluso tengo que agregar el año

Deje la consulta de la siguiente manera pero me aprece igual:

select rut,nombre,nombempr ,ap_pat, saldo, sum(SumaDesaldo) as saldo from (SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, vales.id_vale, cuotas.saldo, empresa.nombempr, cuotas.monto, Sum(cuotas.saldo) AS SumaDesaldo
FROM socios INNER JOIN vales ON socios.rut = vales.rut, cuotas INNER JOIN empresa ON cuotas.id_empresa = empresa.id_empresa
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, vales.id_vale, cuotas.saldo, cuotas.monto, empresa.nombempr, cuotas.mes, cuotas.anio
HAVING (((cuotas.saldo)>"0") AND ((cuotas.mes)="Enero") AND ((cuotas.anio)="2012") ) ) t1 group by rut,nombre,nombempr ,ap_pat, saldo;



Gracias y disculpa !!!!!!

Última edición por eduardomon; 17/02/2012 a las 06:17
  #10 (permalink)  
Antiguo 17/02/2012, 09:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: consulta compleja

Pon un pequeño ejemplo de tus datos con unos 10 registros basta para poder ayudarte mejor :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 02/03/2012, 14:56
 
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: consulta compleja

Cita:
Iniciado por Libras Ver Mensaje
Pon un pequeño ejemplo de tus datos con unos 10 registros basta para poder ayudarte mejor :)

Saludos!
ya encontre la solucion a la consulta pero ahora tengo una siguiente consulta

Como puedo unir estas 2 consultas

Primera cansulta
SELECT socios.rut, socios.nombre, socios.ap_pat, vales.id_vale, cuotas.id_empresa, Sum(cuotas.saldo) AS SumaDesaldo, cuotas.messs, cuotas.saldo, empresa.nombre
FROM (socios INNER JOIN vales ON socios.rut = vales.rut) INNER JOIN cuotas ON vales.id_vale = cuotas.id_vale INNER JOIN empresa ON cuotas.id_empresa = empresa.id_empresa
GROUP BY socios.rut, socios.nombre, socios.ap_pat, vales.id_vale, cuotas.id_empresa, cuotas.messs, cuotas.saldo
HAVING (((cuotas.messs)<='$fechaini') AND ((cuotas.saldo)>'0'))
ORDER BY socios.ap_pat ASC



Segunda consulta
select rut, nombre, ap_pat, sum(saldo) as saldo from( SELECT socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.saldo, pedidos.fecha, Sum(pedidos.saldo) AS SumaDesaldo
FROM socios INNER JOIN pedidos ON socios.rut = pedidos.rut
GROUP BY socios.rut, socios.nombre, socios.ap_pat, socios.ap_mat, pedidos.id_pedido, pedidos.fecha, pedidos.saldo
HAVING (((pedidos.fecha)<='$fechaini') AND ((Sum(pedidos.saldo))>0)) ) t1 group by rut,nombre
ORDER BY ap_pat ASC


tabla socios

Rut 11111-1 22222-2 33333-3 444444-4 555555-5 66666-6 77777-7
nombre eduardo juan andres marcelo patricio rodrigo maria
ap_pat montero perez zamora diaz rojas cansino moya
ap_mat perez moya diaz rojas cansino perez diaz

tabla pedidos

id_pedido 1 2 3 4 5 6 7
rut 11111-1 222222-2 33333-3 444444-4 555555-5 66666-6 77777-7
saldo 50000 20000 40000 50000 20000 60000 40000
fecha 2012-02-11 2012-02-2 2012-02-3 2012-02-8 2012-02-3 2012-02-12

tabla empresa

id_empresa 1 2 3 4 5 6 7
nombre casaR super zapateria carniceria tala cencocal loza


tabla vales

id_vale 1 2 3 4 5 6 7
monto 40000 60000 40000 60000 40000 60000 60000
rut 22222-2 11111- 1 2222-2 66666-6 11111-1 5555-5 66666-6

tabla cuotas

id_vale 1 1 2 2 3 3 4
saldo 20000 20000 30000 30000 20000 20000 60000
id_empresa 2 2 4 4 6 6 6
messs 2012-2-1 2012-3-1 2012-2-1 2012-3-1 2012-2-1 2012-3-1 2012-2-1



lo que me debe entregar la consulta es lo siguiente


rut nombre nombreempresa saldo (por empresa) saldo (total de socio) no se si se puede .


muchas gracias por tu tiempo y disculpa las molestias.

Etiquetas: compleja, fecha, select, sql, tabla
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 06:21.