chb1982
Goto Top

SQL Tabellen verknüpfen mit group by

Hi,

ich bin gerade etwas verzweifelt und habe etliche Stunden google hinter mich gebracht ohne eine Lösung für mein Problem. Ich hoffe ich kann mich hier verständlich genug ausdrücken und jemand hat Hilfe für mich.

Es geht um eine Auswertung, die aus zwei Tabellen kommt.

Tabelle 1: Bestandsbuchungen
Tabelle 2: Bestandsdaten

In Tabelle 1 wird jede Veränderung im Bestand als Datensatz gespeichert.
In Tabelle 2 je Artikel ein Datensatz.

Ich brauche aus Tabelle 1 eine Summe je Artikel. Also
select sum(Zugang) from Tabelle 1 group by Artikelnummer
in die gleiche Abfrage hätte ich dann gerne noch ein Feld aus der Tabelle2. Also
select anfangsbestand-abgang+zugang as summe from Tabelle2
Wie bekomme ich das nun zusammen in eine Abfrage, sodass ich am Ende eine Liste habe:

Artikelnummer - Summe aus Tab1 - Summer aus Tab2


Wahrscheinlich ist die Lösung endlos einfach face-smile

Content-ID: 190957

Url: https://administrator.de/forum/sql-tabellen-verknuepfen-mit-group-by-190957.html

Ausgedruckt am: 11.04.2025 um 10:04 Uhr

nxclass
nxclass 10.09.2012 aktualisiert um 12:41:37 Uhr
Goto Top
.. mit einem JOIN deiner Wahl
... FROM tabelle_1 INNER JOIN tabelle_2 ON tabelle_1.id = tabelle_2.ref_id ...

und einem
SELECT ... SUM( tabelle_2.anfangsbestand - tabelle_2.abgang + tabelle_1.zugang ) AS 'Summe', ...  
... wird das sicher was.
chb1982
chb1982 10.09.2012 aktualisiert um 12:53:32 Uhr
Goto Top
Leider nein, das hatte ich schon versucht. Da ich aus Tabelle1 die Summe je Artikel brauche nutze ich da group by. Das klappt nicht wirklich mit der Tabelle 2

Das wäre dann ja sowas


select sum(tab1.absatz), tab2.anfbestand, tab2.artikelnummer from tab1 inner join tab2 on (tab1.artikel=tab2.artikel)
where tab1.datum < '01.01.2012' and tab1.filiale = 1  
group by artikelnummer
order by artikelnummer

Geht aber nicht.
Biber
Biber 10.09.2012 aktualisiert um 12:56:25 Uhr
Goto Top
Moin morpheus31337,

unter der naheliegenden Annahme, daas eine Verknüpfung über die Artikelnummer erfolgen kann:
SELECT Artikelnummer,
       Zugang
       Istbestand
    from (
select Tab1.Artikelnummer, sum(tab1.zugang) as zugang,
       sum(tab2.anfangsbestand - tab2.abgang + tab1.zugang) as Istbestand
       FROM tablle1 tab1, tabelle2 tab2
       where tab1.artikelnummer=tab2.Artikelnummer
       GROUP BY tab1.Artikelnummer
) ;

Bei dieser Abrage würdest du nur die Sätze erwischen, die sowohl "Zugang" in der einen Tabelle wie auch "Abgänge" in der anderen Tabelle haben.

Wenn ALLE Artikelnummern (auch die, die "nur" einen Anfangsbestand ohne Bewegungsdaten haben-> ändern auch einen LEFT JOIN, ausgehend von der Tabelle, die auf jeden Fall einen "Artikelnummer"-Satz hat.

Grüße
Biber
chb1982
chb1982 10.09.2012 um 13:21:07 Uhr
Goto Top
Ich verzweifel noch.
Hier jetzt mal mit den richtigen Namen um Missverständnisse auszuschließen

select Bereich, Warengruppe, Artikelgruppe, Artikelnummer, SumAbgang, AktBestand 
from ( 
select bj.bj_ber as Bereich, bj.bj_wgr as Warengruppe, bj.bj_agr as Artikelgruppe, bj.bj_anr as Artikelnummer,
sum(bj.bj_plus) as SumAbgang, sum(bsd.bstd_anfbst-bsd.bstd_plus) as AktBestand
from bj, bsd 
where
bj.bj_ber = bsd.bsd_at_at_se_se_ag_ag_wg and bj.bj_wgr = bsd.bsd_at_at_se_se_ag_ag_no and
bj.bj_agr = bsd.bsd_at_at_se_se_no and bj.bj_anr = bsd.bsd_at_at_no) 
group by Bereich, Warengruppe, Artikelgruppe, Artikelnummer

Die Artkielnummer setzt sich aus Bereich, Warengruppe, Artikelgruppe, Artikelnummer zusammen und ist nur mit diesen drei Feldern eindeutig.
Tabelle bj hat alle Bestandsbuchungen
Tabelle bsd nur einen Datensatz je Artikel
nxclass
nxclass 10.09.2012 um 15:34:48 Uhr
Goto Top
Tabelle bsd nur einen Datensatz je Artikel
sum(bsd.bstd_anfbst-bsd.bstd_plus) as AktBestand 
... das erscheint mir nicht richtig.

bsd.bstd_anfbst-SUM(bj.bj_plus) as AktBestand 
LianenSchwinger
LianenSchwinger 10.09.2012, aktualisiert am 11.09.2012 um 07:37:54 Uhr
Goto Top
Hallo,

ich versuche mich auch einmal face-smile

SELECT b.bsd_at_at_se_se_ag_ag_wg AS Bereich,
       b.bsd_at_at_se_se_ag_ag_no AS Warengruppe,
       b.bsd_at_at_se_se_no AS Artikelgruppe,
       b.bsd_at_at_no AS Artikelnummer,
       b.bstd_anfbst-b.bstd_plus AS AktBestand,
       NVL(c.SumAbgang,0) AS SumAbgang
FROM bsd AS b
LEFT JOIN (SELECT a.bj_ber, 
                  a.bj_wgr, 
                  a.bj_agr, 
                  a.bj_anr,
                  SUM(a.bj_plus) AS SumAbgang,
           FROM bj AS a
           GROUP BY a.bj_ber, 
                    a.bj_wgr, 
                    a.bj_agr, 
                    a.bj_anr) AS c ON c.bj_ber = b.bsd_at_at_se_se_ag_ag_wg 
                                   AND c.bj_wgr = b.bsd_at_at_se_se_ag_ag_no
                                   AND c.bj_agr = b.bsd_at_at_se_se_no
                                   AND c.bj_anr = b.bsd_at_at_no

Ausgehend von der Annahme, dass in der Tabelle bsd jeder Artikel vorkommt und in bj erst, wenn eine Bestandsbuchung erfolgt ist. Werden in bj nur Abgänge gespeichert oder auch Warenzugänge? Bei der Tabelle bsd blicke ich jedoch noch nicht ganz durch. Es gibt dort den Anfangsbestand bstd_anfbst ist soweit OK und ein Feld bstd_plus, was steht darin? Und wieso wird er vom Anfangsbestand abgezogen?


Gruß Jörg