SQL Problem (Subselect? Having?)
Hallo zusammen,
es liegen folgende zwei Tabellen vor:
Tabelle Frachtbriefkopf
FB_Nr Versanddatum
1001 01.01.2017
1002 02.01.2017
Tabelle Frachtbriefzeile
FB_Nr Versand ab Rampe Gewicht
1001 1 200
1001 4 400
1001 9 100
1002 1 800
1002 9 100
Ich hätte gerne das Gesamtgewicht aller Sendungen in 2017 in denen Rampe 4 beteiligt war. Das gewünschte Ergebnis wäre:
600 (200+400+100)
Erster Versuch:
select
sum(Gewicht)
from frachtbriefzeile as zeile
inner join frachtbriefkopf as kopf
on zeile.fb_nr = kopf.fb_nr
where versanddatum between 01.01.2017 and 31.12.2017
Vielen Dank im Voraus.
es liegen folgende zwei Tabellen vor:
Tabelle Frachtbriefkopf
FB_Nr Versanddatum
1001 01.01.2017
1002 02.01.2017
Tabelle Frachtbriefzeile
FB_Nr Versand ab Rampe Gewicht
1001 1 200
1001 4 400
1001 9 100
1002 1 800
1002 9 100
Ich hätte gerne das Gesamtgewicht aller Sendungen in 2017 in denen Rampe 4 beteiligt war. Das gewünschte Ergebnis wäre:
600 (200+400+100)
Erster Versuch:
select
sum(Gewicht)
from frachtbriefzeile as zeile
inner join frachtbriefkopf as kopf
on zeile.fb_nr = kopf.fb_nr
where versanddatum between 01.01.2017 and 31.12.2017
Vielen Dank im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 348736
Url: https://administrator.de/forum/sql-problem-subselect-having-348736.html
Ausgedruckt am: 16.02.2025 um 21:02 Uhr
5 Kommentare
Neuester Kommentar
Hallo!
Was du suchst lautet where-in
Die Abfrage könnte dann wie folgt lauten:
.. habe ich aber nicht getestet.
Edit: Die Rampe 4 musst du noch abfragen..![face-wink face-wink](/images/icons/fa/light/face-laugh-wink.svg)
Gruß
eisbein
Was du suchst lautet where-in
Die Abfrage könnte dann wie folgt lauten:
select
sum(Gewicht) as Tonne
from frachtbriefzeile
where fb_nr in(Select fb_nr from Frachtbriefkopf where versanddatum between 01.01.2017 and 31.12.2017)
.. habe ich aber nicht getestet.
Edit: Die Rampe 4 musst du noch abfragen..
Gruß
eisbein
Moin EricA03,
im Prinzp hat eisbein ja recht: wenn du nur EINE Zahl brauchst und keine Felder aus Frachtbriefkopf, dann ginge der erste Teil mit WHERE IN().
die zweite Bedingung "und wo Rampe 4 beteiligt war" könnte dann so ergänzt werden:
Das WHERE EXISTS dollte recht flott gehen, da vermutlich beides Schlüssel felder und deshalb indiziert sind.
Bitte schreib beim nächsten Mal das Datenbank-Blech mit dazu.. ich habe keine Ahnung, welches System das Datum in dieser Form im SQL erlaubt auch und Feldnamen wie "Versand ab Rampe" toleriert. Oder wieso hier "Das gewünschte Ergebnis wäre: 600 (200+400+100)" 600 rauskommt.
Grüße
Biber
im Prinzp hat eisbein ja recht: wenn du nur EINE Zahl brauchst und keine Felder aus Frachtbriefkopf, dann ginge der erste Teil mit WHERE IN().
die zweite Bedingung "und wo Rampe 4 beteiligt war" könnte dann so ergänzt werden:
SELECT sum(fbz.Gewicht) as Gewicht
FROM frachtbriefzeile fbz
WHERE fbz.fb_nr IN (SELECT fb_nr FROM Frachtbriefkopf
WHERE versanddatum between 01.01.2017 and 31.12.2017)
AND EXISTS (SELECT 1 FROM frachtbriefzeile fbz4
WHERE fbz.fb_nr= fbz4.fb_nr
AND fbz4.rampe =4 )
Das WHERE EXISTS dollte recht flott gehen, da vermutlich beides Schlüssel felder und deshalb indiziert sind.
Bitte schreib beim nächsten Mal das Datenbank-Blech mit dazu.. ich habe keine Ahnung, welches System das Datum in dieser Form im SQL erlaubt auch und Feldnamen wie "Versand ab Rampe" toleriert. Oder wieso hier "Das gewünschte Ergebnis wäre: 600 (200+400+100)" 600 rauskommt.
Grüße
Biber