Question

J'ai une table servant de journal des transactions:

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

Je souhaite qu'une requête regroupe tous les ADD et tous les REMOVE séparément pour une date donnée.

Chacune de ces instructions select fonctionne correctement, mais elles ne peuvent pas être jointes:

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'

Puis-je stocker les résultats de chaque instruction select dans une table, puis les joindre? Y a-t-il un moyen d'éviter tout cela ensemble?

Merci- Jonathan

Était-ce utile?

La solution

Examinez la syntaxe UNION si vous voulez vraiment ajouter les résultats de plusieurs requêtes en une seule:

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

Toutefois, dans ce cas, consultez GROUP BY

Vous pouvez grouper le Date, action , ce qui donne un enregistrement par jour et par action, SUM () pouvant vous donner la quantité.

Par exemple:

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

entraînera:

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

Autres conseils

Cela vous aiderait si vous montriez quelle sortie vous voulez réellement. De votre " as Added " et " Supprimé " Je suppose que vous ne voulez pas un syndicat, mais peut-être quelque chose comme ça:

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

(avec un groupe par date si vous sélectionnez plusieurs dates.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top