ericag3
Goto Top

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.

Content-Key: 348736

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: SlainteMhath
SlainteMhath Sep 11, 2017 at 10:13:24 (UTC)
Goto Top
Moin,

sollte eigentlich mit

[...]
where (versanddatum between 01.01.2017 and 31.12.2017) and zeile.VersandAbRampe=4

funktionieren, oder hab ich was übersehen?

lg,
Slainte
Member: EricAG3
EricAG3 Sep 11, 2017 at 10:18:27 (UTC)
Goto Top
Dann würde das Ergebnis 400 lauten.
Ich habe meinen Eingangspost noch einmal bearbeitet, dann sollte es deutlicher werden.
Member: eisbein
Solution eisbein Sep 11, 2017 updated at 10:27:43 (UTC)
Goto Top
Hallo!

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.. face-wink

Gruß
eisbein
Member: EricAG3
EricAG3 Sep 11, 2017 at 11:47:00 (UTC)
Goto Top
Perfekt, danke.
Member: Biber
Biber Sep 11, 2017 updated at 13:47:39 (UTC)
Goto Top
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:
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