Ver Mensaje Individual
  #7 (permalink)  
Antiguo 23/04/2014, 07:40
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Como funciona realmente UNION?

Cita:
los registros de consulta 1 machacan a los de cosulta 2? aquellos donde colum 1---colum2-----colum3 son iguales, pero column4 es distinto ( decir que agrupo por kas 3 primeras columnas, no se si eso tiene algo que ver) y xq se sobrescribe los registros de la prmera consulta en la segunda y no alrreves?
¿Entendiste que eso no lo hace el UNION?
Ya te lo expliqué:
Cita:
Pero luego estás haciendo un GROUP BY, y ese GROUP BY se ejecuta sobre la tabla resultante o derivada de ese UNION. Y es allí donde se descartan competamente los resultados de los registros de ese UNION, dejando sólo el primer registro por cada grupo indicado. Pero es allí donde debes sumarlo:
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
  1. mysql> CREATE TABLE tabla1 (
  2.     ->     id_tabla1 INT UNSIGNED PRIMARY KEY,
  3.     ->     cod_cliente INT UNSIGNED,
  4.     ->     servicio VARCHAR(3),
  5.     ->     subservicio VARCHAR(10),
  6.     ->     importe INT
  7.     -> );
  8. Query OK, 0 rows affected (0.44 sec)
  9.  
  10. mysql> INSERT INTO tabla1
  11.     -> VALUES (
  12.     -> 1, 1, 'S12', 'SUB23', 25),
  13.     -> (2, 1, 'S12', 'SUB45', 45),
  14.     -> (3, 1, 'S34', 'SUB78', 78),
  15.     -> (4, 2, 'S12', 'SUB24', 48),
  16.     -> (5, 2, 'S33', 'SUB43', 78);
  17. Query OK, 5 rows affected (0.14 sec)
  18. Records: 5  Duplicates: 0  Warnings: 0
  19.  
  20. mysql>
  21. mysql> CREATE TABLE tabla2 (
  22.     ->     id_tabla2 INT UNSIGNED PRIMARY KEY,
  23.     ->     cod_cliente INT UNSIGNED,
  24.     ->     servicio VARCHAR(3),
  25.     ->     subservicio VARCHAR(10),
  26.     ->     importe INT
  27.     -> );
  28. Query OK, 0 rows affected (0.08 sec)
  29.  
  30. mysql> INSERT INTO tabla2
  31.     -> VALUES (1, 1, 'S12', 'SUB23', 7),
  32.     -> (2, 2, 'S33', 'SUB43', 8);
  33. Query OK, 2 rows affected (0.03 sec)
  34. Records: 2  Duplicates: 0  Warnings: 0
  35.  
  36. mysql>
  37. mysql> SELECT
  38.     ->     cod_cliente, servicio, subservicio, SUM(importe) importe
  39.     -> FROM
  40.     ->     (SELECT
  41.     ->         cod_cliente, servicio, subservicio, importe
  42.     ->     FROM
  43.     ->         tabla1 UNION SELECT
  44.     ->         cod_cliente, servicio, subservicio, importe
  45.     ->     FROM
  46.     ->         tabla2) T3
  47.     -> GROUP BY cod_cliente , servicio , subservicio;
  48. +-------------+----------+-------------+---------+
  49. | cod_cliente | servicio | subservicio | importe |
  50. +-------------+----------+-------------+---------+
  51. |           1 | S12      | SUB23       |      32 |
  52. |           1 | S12      | SUB45       |      45 |
  53. |           1 | S34      | SUB78       |      78 |
  54. |           2 | S12      | SUB24       |      48 |
  55. |           2 | S33      | SUB43       |      86 |
  56. +-------------+----------+-------------+---------+
  57. 5 rows in set (0.09 sec)
Al menos según lo que dices:
Cita:
lo que quiero es unir las dos subconsultas y sumar el importe, para que quede de esta forma

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
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...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)