Menge ermitteln

Hallo,

Es gibt eine Tabelle „Artikel“:

[font=Times New Roman][size=100]Id | Artikel_ID | Menge | Status[/size][/font]
[font=Times New Roman][size=100]1     21                5              A[/size][/font]
[font=Times New Roman][size=100]2     22                3              A[/size][/font]
[font=Times New Roman][size=100]3     21                4              B[/size][/font]
[font=Times New Roman][size=100]4     21                2              A[/size][/font]
[font=Times New Roman][size=100]5     21                3              C[/size][/font]
[font=Times New Roman][size=100]6     21                1              B[/size][/font]

Ich möchte mit eine SQL Abfrage die Menge mit dem Status ‚A’ und die Menge mit Status B ermitteln.
Zum Beispiel:

[font=Times New Roman][size=100]Artikel_ID | Menge mit Status A | Menge mit Status B[/size][/font]
[size=100][font=Times New Roman]21                  7                                5 [/font][/size]

Ich weiß, dass ich das mit zwei SQL Abfragen machen kann.

Select Artikel_ID, SUM(Menge) FROM „Artikel“
WHERE „Artikel_ID“ = ‘21’ AND „Status“ = ‘A’
Group By „Artikel_ID“

Select Artikel_ID, SUM(Menge) FROM „Artikel“
WHERE „Artikel_ID“ = ‘21’ AND „Status“ = ‘B’
Group By „Artikel_ID“


Die Frage ist, ob ich das in eine SQL Abfrage einpacken kann.

Danke in voraus.

Igor

Kurze Antwort: ja.
längere Antwort: das habe ich gestern Abend erst in einer ähnlichen Anwendung gezeigt.

Bitte: anstatt Formatierung mit Schriftarten lieber Copy&Paste-fähige Tabellendefinition und Insert-Befehle für Beispieldaten zeigen.

ganz lange Antwort:

test=*# select * from mengen ;
 id | artikel | menge | status
----+---------+-------+--------
  1 | 21      |     5 | a
  2 | 22      |     3 | a
  3 | 21      |     4 | b
  4 | 21      |     2 | a
  5 | 21      |     3 | c
  6 | 21      |     1 | b
(6 rows)

test=*# select artikel, sum(case when status='a' then menge else 0 end) as "Menge A", sum(case when status='b' then menge else 0 end) as "Menge B" from mengen where artikel = '21' group by 1;
 artikel | Menge A | Menge B
---------+---------+---------
 21      |       7 |       5
(1 row)

Btw.: ich zeige dies so ca. 3-4 mal pro Monat …


Andreas

Danke Andreas.

Igor