MySQL - Unir el resultado de dos SELECT

   
Vista:

Unir el resultado de dos SELECT

Publicado por Johm juangamecube@hotmail.com (8 intervenciones) el 10/04/2014 17:32:16
Buenas, tengo un problema que por muchas vueltas que le doy no consigo solucionar.

Mi intención es unir dos select, de tal forma que uno de ellos limite el numero de registros que se muestran en la consulta total.

Tengo dos tablas:

-una con clientes ( donde esta el cod de cliente (Primary key) y el nombre)

-otra con los gastos. Los de esos clientes y de otros que no están definidos en la tabla clientes. Realizo un select en la tabla de gastos, de tal manera que me sume los gastos de cada subservicio contratado por el cliente y contabilice el numero de unidades de ese subservicio. La Consulta es esta.

SELECT nom_cliente_imputacion, servicio,subservicio, SUM(CP), COUNT(Subservicio) from detalle_costes GROUP BY nom_cliente_imputacion, servicio, subservicio;

Tambien los ordeno por el cliente servicio y subservicio.

El problema viene ahora, cuando intento unir el resultado de ese SELECT con los clientes de la tabla clientes, para que solo me muestre los gastos de los clientes definidos en la tabla.

Lo he intentado asi:

SELECT nom_cliente_imputacion, servicio,subservicio, SUM(CP), COUNT(Subservicio) from detalle_costes GROUP BY nom_cliente_imputacion, servicio, subservicio

NATURAL JOIN

(SELECT COD_CLIENTE FROM clientes) AS SELECT_1 GROUP BY nom_cliente_imputacion, servicio,subservicio;


Ejecuta la consulta pero no obtengo lo que quiero, aparte de que no me filtra por los clientes de la tabla clientes, me salen cantidades mucho mas elevadas que al realizar la consulta sola

SELECT nom_cliente_imputacion, servicio,subservicio, SUM(CP), COUNT(Subservicio) from detalle_costes GROUP BY nom_cliente_imputacion, servicio, subservicio;


Alguien me puede echar una mano porfavor????? llevo mucho tiempo con esto :(


Un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Unir el resultado de dos SELECT

Publicado por xve (899 intervenciones) el 10/04/2014 20:47:12
Hola Johm, prueba de esta manera...

1
2
3
4
SELECT nom_cliente_imputacion, servicio,subservicio, SUM(CP), COUNT(Subservicio) from detalle_costes
LEFT JOIN clientes ON detalle_costes.idClientes=clientes.id
WHERE clientes.id is not null
GROUP BY nom_cliente_imputacion, servicio,subservicio;

Primero vinculo la tabla detalle_costes con clientes... detalle_costes.idClientes=clientes.id no se si son esos los campos vinculantes entre las dos tablas...

Lego miro que clientes.id no sea null, ya que si es así, es que ese detalle_costes no tiene cliente, por lo que no lo mostramos. (esta no se si tendría que ser al revés, eso tu lo veras)

Coméntanos, si te funciona, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Unir el resultado de dos SELECT

Publicado por Johm (8 intervenciones) el 11/04/2014 09:11:12
Me funciona perfectamente, muchas gracias!!!

Aprovecho para comentar otra cosilla. ¿Es posible indexar varios SELECT? , con el resultado de la consulta anterior tengo que seguir operando ( mezclando tablas etc etc) hasta llegar a mostrar lo que quiero.

Como se indexarian? o como se unirian?? Se que hay un comando, UNION que sirve para unir distintos selects, pero no lo tengo del todo claro...


Por ejemplo con el resultado de la consulta anterior quiero operar con el campo CP, dividiendolo por una cantidad que esta en en un registro de otra tabla y despues a la vez multiplicarlo por el registro de otra. Para ello tendré que hacer varios SELECT juntos.

Un saludo y muchas gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Unir el resultado de dos SELECT

Publicado por Johm (8 intervenciones) el 11/04/2014 11:53:53
Otro fallo que me da, siguiendo el esquema que me has indicado, intento realizar esta consulta

SELECT * FROM facturacion WHERE año_mes='2014_01'

LEFT JOIN clientes ON facturacion.CLIENTE_IMPUTACION = clientes.COD_CLIENTE

WHERE clientes.COD_CLIENTE IS NOT NULL

GROUP BY nom_cliente_imputacion, servicio, subservicio

Lo que quiero es que de la tabla facturación de los registro con año_mes 2014_01 me muestre solo aquellos clientes que esten en la tabla clientes. Me da error en el where, he probado la sentencia sola y despues añadiendole el left join, y la hace bien sin la segunda parte, al añadirle la otra para unirla me da el error.

Error
consulta SQL: Documentación

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN clientes ON facturacion.CLIENTE_IMPUTACION = clientes.COD_CLIENTE WH' at line 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Unir el resultado de dos SELECT

Publicado por Johm (8 intervenciones) el 13/04/2014 16:31:03
Vale, lo he solucionado. El where de la primera linea no puede ir ahi, las condiciones tienen que ir todas en el where de la tercera linea.


Sigo preguntando algunas dudillas...

Lo mismo que he hecho con los clientes lo he hecho con una tabla de grupos de clientes ( donde tengo el total de clientes del grupo).

Explico la situación.

Tengo una tabla donde hay agrupaciones de clientes y clientes ( las agrupaciones de clientes son ''edificios'' donde se da un subservicio a varios clientes). Anteriormente separe de la tabla facturacion, los clientes, de los grupos de clientes, ahora quiero operar sobre la consulta de grupo de clientes.

Tengo otra consulta donde se agrupa el total de clientes en una agrupacion, Lo que quiero es sacar la parte proporcional de cada cliente y sumarla por servicio y subservicio a la consulta de los clientes. Lo que quiero obtener finalmente es una tabla de facturacion donde se refleje la facturacion de cada cliente por servicio y subservicio. ( calculando como he dicho la parte proporcional de cada cliente dentro del grupo y sumandola si el subservicio ya lo esta recibiendo el cliente individualmente, o agregandolo si el cliente no recibe el subservicio individualmente)


Porfavor a ver si me puyede ayudar alguien :(


Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar