Cita:
Iniciado por gnzsoloyo ¿Entendiste que eso no lo hace el UNION?
Ya te lo expliqué:
Tu no estás agrupando sobre el cuarto campo. Lo estás sumando, por consecuencia, agrupa en base a esos tres primeros y suma todos los valores del cuarto campo donde coincidan esos tres.
de todos modos, si tomo tus propios datos, y lo que planteas hacer, el resutlado es el esperado:
Código MySQL:
Ver original -> );
Query OK, 0 rows affected (0.44 sec)
-> 1, 1, 'S12', 'SUB23', 25),
-> (2, 1, 'S12', 'SUB45', 45),
-> (3, 1, 'S34', 'SUB78', 78),
-> (4, 2, 'S12', 'SUB24', 48),
-> (5, 2, 'S33', 'SUB43', 78);
Query OK, 5 rows affected (0.14 sec)
mysql>
-> );
Query OK, 0 rows affected (0.08 sec)
-> VALUES (1, 1, 'S12', 'SUB23', 7), -> (2, 2, 'S33', 'SUB43', 8);
Query OK, 2 rows affected (0.03 sec)
mysql>
-> cod_cliente
, servicio
, subservicio
, SUM(importe
) importe
-> cod_cliente, servicio, subservicio, importe
-> cod_cliente, servicio, subservicio, importe
-> tabla2) T3
-> GROUP BY cod_cliente
, servicio
, subservicio
; +-------------+----------+-------------+---------+
| cod_cliente | servicio | subservicio | importe |
+-------------+----------+-------------+---------+
| 1 | S12 | SUB23 | 32 |
| 1 | S12 | SUB45 | 45 |
| 1 | S34 | SUB78 | 78 |
| 2 | S12 | SUB24 | 48 |
| 2 | S33 | SUB43 | 86 |
+-------------+----------+-------------+---------+
Al menos según lo que dices:
O sea que si hay algún defecto, no es en la lógica del UNION, el GROUP BY o los datos. Es otra cosa...
¿Podrías postearnos el CREATE TABLE de las tablas involucradas? Sólo para confirmar...
No son tablas son subconsultas que tienen los campos que he comentado arriba.
Estoy haciendo pruebas y parece que lo voy entendiendo
La unica duda que me queda ( o eso creo jajaj) es lo de:
subconsulta1
UNION
subconsulta2
Vale, coge y agrega todos los registros, pero al final de la UNION agrupo por cod_cliente servicio y subservicio, al agruparlo se queda solo con un registro que contenga estos tres parametros iguales, operando sobre el resto: pudiendo sacar la suma, contar los registros etc etc.
Pero porque mantiene el de la primera consulta? el de subconsulta 1 y si los cambio de orden mantiene el de subconsulta2? Como puedo controlar con que registro de las subconsultas ( los que tienen los tres parametros iguales como comenté) se queda??
Y una ultima cosilla, al unir dos subconsultas, puedo elegir que columna de cada registro mostrar?? Me explico:
subconsulta1
columna1-----columna2----------columna3
1-----------------cliente1-------------test1
2-----------------cliente2-------------test2
3-----------------cliente3-------------test3
subconsulta2
clumna1---------columna2------columna3
1-------------------cliente1-----------test33
2-------------------cliente3-----------test32
subconsulta1
union
subconsulta2
quiero mostrar por ejemplo
columna1-----columna2----------columna3
1-----------------cliente1-------------test33
2-----------------cliente2-------------test2
3-----------------cliente3-------------test32
y ya aprovecho y pregunto otra cosilla voy a agrupar estos dos registros
subconsulta1
columna1-----columna2----------importe--------grupo
1-----------------cliente1-------------2--------------sin grupo
1-----------------cliente1-------------4--------------grupo1
y lo que quiero es
columna1-----columna2----------importe--------grupo
1-----------------cliente1-------------6--------------grupo1
Hay alguna forma de al hacer el group by indicar que ''grupo'' dejar en la agrupacion?
lo he hecho asi
Select solumna1, columna2, sum(importe) as importe, grupo
FROM
(subconsulta1)
GROUP BY columna1, columna2;
mil gracias de nuevo!