josefsepp
Goto Top

SQL-Abfrage - 2 mal COUNT auf gleiche Spalte einer Tabelle.

Hallo,

Ich habe folgendes Problem.

Ich habe die Tabelle "Lieferscheine" in der Datenbank.

Nun soll herausgefunden welcher Lieferant, wie viele Lieferscheine hat.

Sinngemäß:

__________________

Select lieferant, count(*)

from lieferscheine

where lieferant in (1,2,3,4,5)

group by lieferant

___________________

Zugleich soll herausgefunden welche Lieferscheine bei den jeweiligen Lieferanten noch offen sind.

Sinngemäß:
______________________

Select lieferant, count(*)

from lieferscheine

where lieferant in (1,2,3,4,5)
and status = 1

group by lieferant

_______________________


Nun sollen die beiden Abfragen zusamengeführt werden, dass die Ausgabe so aussieht

Lieferant |LS_komplett |LS_offen
1 |2131 |1001
2 |1234 |700
3 |3429 |100
4 |21241 |5000


Gibt es eine Möglichkeit, dies zu realisieren?

Im Voraus schon mal besten Dank für Eure Hilfe.

mfg

JosefSepp

Content-Key: 170513

Url: https://administrator.de/contentid/170513

Printed on: April 16, 2024 at 20:04 o'clock

Member: AndreasHoster
AndreasHoster Jul 27, 2011 at 12:17:00 (UTC)
Goto Top
Die einfache Lösung wäre:
Die beiden Statements oben als View bauen und dann eine View, die die beiden über einen Join zusammennimmt.

Wenn man es als einzelnes Select Statement haben will, es sollte auch sowas gehen (ungetestet):
Select t1.Lieferant, t1.Komplett, t2.Offen
from
(Select lieferant, count(*) as komplett from lieferscheine where lieferant in (1,2,3,4,5) group by lieferant) as t1,
(Select lieferant, count(*) as offenfrom lieferscheine where lieferant in (1,2,3,4,5) and status=1 group by lieferant) as t2
where t1.Lieferant=t2.Lieferant
Im Moment werden damit nur Lieferanten gefunden, die auch offene Posten haben, muß man halt den Inner Join in ein Outer Join umwandeln, aber da weiß ich die Syntax gerade nicht auswendig.
Member: dog
dog Jul 27, 2011 at 13:24:14 (UTC)
Goto Top
Am einfachsten ist ein Subselect:

SELECT
  t.*,
  COUNT(*) AS Gesamt,
  (SELECT COUNT(*) FROM Lieferscheine t2 WHERE t2.Lieferant = t.Lieferant AND t2.Status = 1) AS Offen
FROM
  Lieferscheine t
WHERE
  t.Lieferant IN (1,2,3)
GROUP BY
  t.Lieferant
(ungetestet)
Member: JosefSepp
JosefSepp Aug 10, 2011 at 07:19:20 (UTC)
Goto Top
So bin gerade wieder aus dem Urlaub zurück und werde beide Varianten mal testen. Vielen Dank!