Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/03/2017, 12:34
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: union all + group by

Hola mikil:

Creo que estás enfocando mal tu consulta, sin embargo no nos explicas qué es en realidad lo que quieres hacer, pero veamos si entendí bien tu código.

Según lo que veo, lo que intentas es contar cuántas ventas hay de cada tipo (1 a 7) de cada artículo... esto más que haciendo subconsultas y UNION's, lo puedes resolver en una simple consulta utilizando sumas condicionales... checa este ejemplo:

Supongamos que tienes estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+--------+--------+--------+
  3. | articulo | venta1 | venta2 | venta3 |
  4. +----------+--------+--------+--------+
  5. | art 1    |      1 |      0 |      0 |
  6. | art 1    |      1 |      0 |      0 |
  7. | art 1    |      0 |      1 |      0 |
  8. | art 1    |      0 |      0 |      1 |
  9. | art 2    |      1 |      0 |      0 |
  10. | art 2    |      1 |      0 |      0 |
  11. | art 2    |      1 |      0 |      0 |
  12. | art 2    |      0 |      0 |      1 |
  13. +----------+--------+--------+--------+
  14. 8 rows in set (0.00 sec)


Ahora bien, si queremos sacar el total de ventas tipos 1, 2 y 3 para cada artículo, simplemente hacemos algo así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   articulo,
  3.     ->   SUM(IF(venta1 > 0, 1, 0)) total_ventas1,
  4.     ->   SUM(IF(venta2 > 0, 1, 0)) total_ventas2,
  5.     ->   SUM(IF(venta3 > 0, 1, 0)) total_ventas3
  6.     -> FROM tabla
  7.     -> GROUP BY articulo;
  8. +----------+---------------+---------------+---------------+
  9. | articulo | total_ventas1 | total_ventas2 | total_ventas3 |
  10. +----------+---------------+---------------+---------------+
  11. | art 1    |             2 |             1 |             1 |
  12. | art 2    |             3 |             0 |             1 |
  13. +----------+---------------+---------------+---------------+
  14. 2 rows in set (0.00 sec)

Dale un vistazo para ver si es lo que necesitas, de lo contrario postea unos datos de ejemplo y dinos qué es lo que esperas obtener con esos datos. De esta manera es posible que haya otra forma más simple de hacer lo que quieres... finalmente, hay otra forma "ruda" de utilizar lo que ya hiciste, y es volviendo a agrupar toda la consulta, es decir, hacer algo así:

Código MySQL:
Ver original
  1.   encargos.monturaVta montura,
  2.   sum(ventastda1) ventastda1,
  3.   sum(ventastda2) ventastda2,
  4.   sum(ventastda3) ventastda3,
  5.   sum(ventastda4) ventastda4,
  6.   sum(ventastda5) ventastda5,
  7.   sum(ventastda6) ventastda6,
  8.   sum(ventastda7) ventastda7
  9. (
  10.     --Aquí pones tu consulta
  11. ) T
  12. group by monturaVta

Sin embargo, consultas así tienen un pésimo rendimiento. Haz la prueba con lo que puse arriba y nos comentas.

Saludos
Leo