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

[SOLUCIONADO] 2 campos calculados, misma tabla.

Estas en el tema de 2 campos calculados, misma tabla. en el foro de Mysql en Foros del Web. Buenas a todos. Tengo la siguiente consulta (seguramente una aberracion para algunos) que me trae los datos de de ventas en un mes y año ...
  #1 (permalink)  
Antiguo 16/01/2016, 16:56
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Pregunta 2 campos calculados, misma tabla.

Buenas a todos.

Tengo la siguiente consulta (seguramente una aberracion para algunos) que me trae los datos de de ventas en un mes y año indicado (ejemplo: enero-2016), el primer select cruza datos de 2 tablas (ventas, control_clases) para el resto de select son todos a la misma tabla (ventas).

Esta consulta recupera la suma de ventas (cobrado) agrupandolos por id_actividad.

En la tabla existe un campo llamado tarjeta (boleano 0/1), la idea es generar 2 campos calculados en funcion de este, suma metalico (tarjeta=0) y suma tarjeta (tarjeta=1), el campo calculado actual suma me es indiferente.

Alguien puede orientarme de como realizar esto. y si es posible hacer una consulta mas simple. SQL no es lo mio la verdad, aun que poco a poco golpe a golpe va entrando.

Un saludo, muchas gracias.

Código SQL:
Ver original
  1. SELECT
  2. ventas.tarjeta,
  3. ventas.concepto,
  4. ventas.actividad,
  5. ventas.id_actividad,
  6. SUM(ventas.cobrado) AS suma
  7. FROM
  8. control_clases,ventas
  9. WHERE
  10. control_clases.ano=2016 AND control_clases.mes=1 AND ventas.id=control_clases.id_ventas
  11. GROUP BY
  12. id_actividad
  13.  
  14. UNION ALL
  15.  
  16. SELECT
  17. tarjeta,
  18. INSERT(concepto,1,50,'Suma BP'),
  19. actividad,
  20. INSERT(id_actividad,1,5,' '),
  21. SUM(cobrado) AS suma
  22. FROM
  23. ventas
  24. WHERE
  25. YEAR(fecha_cobro)=2016 AND MONTH(fecha_cobro)=1 AND actividad='BP'
  26. GROUP BY
  27. id_actividad
  28.  
  29. UNION ALL
  30.  
  31. SELECT
  32. tarjeta,
  33. INSERT(concepto,1,50,'Suma BG'),
  34. actividad,
  35. INSERT(id_actividad,1,5,' '),
  36. SUM(cobrado) AS suma
  37. FROM
  38. ventas
  39. WHERE
  40. YEAR(fecha_cobro)=2016 AND MONTH(fecha_cobro)=1 AND actividad='BG'
  41. GROUP BY
  42. id_actividad
  43.  
  44. ORDER BY actividad,concepto,suma

Esto es lo que tengo ahora
Código text:
Ver original
  1. concepto  |  actividad  |  id_actividad  |  suma
  2. ------------------------------------------------------
  3. concepto1  |  CN         |  2                |  120.00
  4. concepto2  |  CN         |  5                |  75.00
  5. suma BP    |  BG         |  10              |  735.00
  6. suma BG    |  BP         |  18               |  262.50

Y esto es lo que pretendo
Código text:
Ver original
  1. concepto  |  actividad  |  id_actividad  |  suma    | tarjeta  | metalico
  2. ---------------------------------------------------------------------------
  3. concepto1  |  CN         |  2              |  120.00  | 80.00    |  40.00
  4. concepto2  |  CN         |  5              |  75.00   | 65.00    |  10.00
  5. suma BP   |  BG         |  10              |  735.00  | 35.00    |  700.00
  6. suma BG   |  BP         |  18              |  262.50  | 62.00    |  200.00
  #2 (permalink)  
Antiguo 16/01/2016, 20:43
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: 2 campos calculados, misma tabla.

Gracis a todos los que habeis leido el tema, ya he conseguido solucionarlo utilizando
Código SQL:
Ver original
  1. SUM(IF(ventas.tarjeta='1',cobrado,0)) AS tarjeta,
  2. SUM(IF(ventas.tarjeta='0',cobrado,0)) AS metalico,
  3. SUM(ventas.cobrado) AS suma

Igualmente, si alguien conoce un metodo mejor o alguna forma de simplificarlo bien venido sea.

Así es como a quedado
Código SQL:
Ver original
  1. SELECT
  2.     ventas.tarjeta,
  3.     ventas.concepto,
  4.     ventas.actividad,
  5.     ventas.id_actividad,
  6.     SUM(IF(ventas.tarjeta='1',cobrado,0)) AS tarjeta,
  7.     SUM(IF(ventas.tarjeta='0',cobrado,0)) AS metalico,
  8.     SUM(ventas.cobrado) AS suma
  9.     FROM
  10.     control_clases,ventas
  11.     WHERE
  12.     control_clases.ano=2016 AND control_clases.mes=1 AND ventas.id=control_clases.id_ventas
  13.     GROUP BY
  14.     id_actividad
  15.      
  16.     UNION ALL
  17.      
  18.     SELECT
  19.     tarjeta,
  20.     INSERT(concepto,1,50,'Suma BP'),
  21.     actividad,
  22.     INSERT(id_actividad,1,5,' '),
  23.     SUM(IF(ventas.tarjeta='1',cobrado,0)) AS tarjeta,
  24.     SUM(IF(ventas.tarjeta='0',cobrado,0)) AS metalico,
  25.     SUM(ventas.cobrado) AS suma
  26.     FROM
  27.     ventas
  28.     WHERE
  29.     YEAR(fecha_cobro)=2016 AND MONTH(fecha_cobro)=1 AND actividad='BP'
  30.     GROUP BY
  31.     id_actividad
  32.      
  33.     UNION ALL
  34.      
  35.     SELECT
  36.     tarjeta,
  37.     INSERT(concepto,1,50,'Suma BG'),
  38.     actividad,
  39.     INSERT(id_actividad,1,5,' '),
  40.     SUM(IF(ventas.tarjeta='1',cobrado,0)) AS tarjeta,
  41.     SUM(IF(ventas.tarjeta='0',cobrado,0)) AS metalico,
  42.     SUM(ventas.cobrado) AS suma
  43.     FROM
  44.     ventas
  45.     WHERE
  46.     YEAR(fecha_cobro)=2016 AND MONTH(fecha_cobro)=1 AND actividad='BG'
  47.     GROUP BY
  48.     id_actividad
  49.      
  50.     ORDER BY actividad,concepto,suma

Etiquetas: campo, campos, 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 13:50.