Pregunta

Tengo una tabla que sirve como registro de transacciones:

Date  Action  Qty
11-23  ADD     1
11-23  REMOVE  2
11-23  ADD     3

Me gustaría que una consulta agregue todos los AGREGAR y todos los ELIMINAR por separado para una fecha determinada.

Cada una de estas declaraciones select funciona bien, pero no se pueden unir:

select date, sum(qty) as Added from table where action='Add' and date='11-23'

natural join

select date, sum(qty) as Removed from table where action='Remove' and date='11-23'

¿Puedo almacenar los resultados de cada instrucción select en una tabla y luego unirlos? ¿Hay alguna manera de evitar esto todo junto?

Gracias- Jonathan

¿Fue útil?

Solución

Eche un vistazo a la sintaxis de UNION, si realmente desea agregar los conjuntos de resultados de múltiples consultas en una sola:

http://dev.mysql.com/doc/refman /5.0/en/union.html


Sin embargo, en este caso, eche un vistazo a GRUPO POR

Puede agrupar en Fecha, Acción , lo que da como resultado un registro por día por acción, con SUM () poder darle la cantidad.

Por ejemplo:

select 
  date,
  action, 
  sum(qty) AS Quantity 
from 
  table 
group by
  date, action

resultará en:

11-23 | ADD    | 10
11-23 | REMOVE |  5
11-24 | ADD    |  4
11-24 | REMOVE |  3

Otros consejos

Sería útil si mostrara qué salida realmente desea. De su " como agregado " y "Quitado" Supongo que no quieres una unión, pero tal vez algo como esto:

select
    date,
    sum(if(action='ADD',qty,0)) as Added,
    sum(if(action='REMOVE',qty,0)) as Removed
from `table`
where date='11-23';

(con un grupo por fecha si está seleccionando varias fechas)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top