Frage

Ich habe eine Tabelle, die als ein Transaktionsprotokoll:

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

würde ich eine Abfrage wie alle ADDs und all die Beseitigt separat für ein bestimmtes Datum zu aggregieren.

Jeder dieser select-Anweisungen funktionieren, aber sie können nicht miteinander verbunden werden:

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'

Kann ich die Ergebnisse der einzelnen select-Anweisung an einen Tisch und dann diejenigen beitreten? Gibt es eine Möglichkeit, dies alles zusammen zu vermeiden?

Thanks- Jonathan

War es hilfreich?

Lösung

Hier finden Sie aktuelle UNION Syntax, wenn Sie wirklich die Ergebnismengen von mehreren Abfragen in einem hinzufügen möchten:

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


jedoch in diesem Fall einen Blick auf GROUP BY

könntest Du Gruppe Date, Action deshalb in einem Datensatz pro Tag resultierenden pro Aktion, mit SUM() in der Lage, Ihnen die Menge zu geben.

Zum Beispiel:

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

Wird ergeben:

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

Andere Tipps

Es würde helfen, wenn Sie zeigt, welche Ausgabe Sie eigentlich wollen. Von Ihrem „als Added“ und „als entfernt“ Ich vermute, dass Sie nicht wollen eine Union, aber vielleicht etwas wie folgt aus:

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

(mit einem group by date, wenn Sie mehrere Termine auswählen.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top