Abfrage über 2 Tabellen, Bestellartikel und Lieferartikel

14/10/2010 - 10:10 von Bernd Konle | Report spam
Hallo beisammen,
mein Problem ist eine Abfrage über 2 Tabellen wo ich nicht
weiterkomme.

In Tabelle 1 sind alle Bestellungen mit Bestell_ID, Pos und
Bestell_Menge
In Tabelle 2 sind alle Lieferungen mit Bestell_ID, Pos und
Liefer_Menge

Nun bin will ich mir eine View basteln die mir ausgeben soll was
bestellt worden ist und tatsàchlich bis jetzt geliefert wurde.

Tabelle Bestellungen:

BestellID Pos Menge_bestellt
1111 10 55
1111 20 9
2222 10 22
3333 10 75
4444 10 180
4444 20 10
4444 30 150



Tabelle Teillieferungen:

BestellID Pos Menge_geliefert
1111 10 10
1111 20 3
1111 30 40
2222 10 15
3333 10 75
4444 10 180
4444 20 5
4444 20 3
4444 30 10
4444 30 120


Meine View:

BestellID Pos Menge_bestellt Menge_geliefert Menge_noch_ausstehend
1111 10 55 10
45
1111 20 9 3
6
2222 10 22 15
7
3333 10 75 75
0
4444 10 180
180 0
4444 20 10 3
7
4444 20 10
5 5
4444 30 150 10
140
4444 30 150 120
30



Mein Problem:

Bestellt worden sind immer 1x Menge, z.B. BestellID 4444, Pos 30,
Menge 150. Aber geliefert worden ist dies nicht auf einmal sondern 2x
in Teillieferungen. Da ich jetzt möchte was insgesamt noch aussteht,
bzw. ist die Lieferung komplett oder fehlt noch was, habe ich die
Spalten "Bestellt_Menge" von der "Liefer_Menge" abgezogen.

Da aber die Bestellung mit der ID 4444 auf 2x angeliefert wurde, wird
mir die Spalte 2x aufgezeigt und 2x auch die Bestellte Menge
angezeigt.

Ich möchte aus 1x Bestellmenge die SUM aus der Liefermenge abziehen.
Das krieg ich irgendwie nicht hin.

Hierzu mein Code:
select
a.BestellID,
a.Pos,
a.Menge_bestellt,
b.Menge_geliefert,

convert(float,a.Menge_bestellt) -
SUM(convert(float,b.Menge_geliefert)) Menge_noch_ausstehend

from Bestellungen a

inner join
Lieferungen b
on
a.BestellID = b.BestellID and a.Pos = b.Pos

group by a.BestellID, a.Pos,a.Menge_bestellt,b.Menge_geliefert




Für den Nachbau:
Tabelle Lieferung:

CREATE TABLE [dbo].[Lieferungen](
[BestellID] [nchar](10) NULL,
[Pos] [nchar](10) NULL,
[Menge_geliefert] [nchar](10) NULL
) ON [PRIMARY]

-
Tabelle Bestellung:

CREATE TABLE [dbo].[Bestellungen](
[BestellID] [nchar](10) NULL,
[Pos] [nchar](10) NULL,
[Menge_bestellt] [nchar](10) NULL
) ON [PRIMARY]


fill Bestellungen:

INSERT INTO Bestellungen (BestellID,Pos,Menge_bestellt)
VALUES
('1111','10','55'),
('1111','20','9'),
('2222','10','22'),
('3333','10','75'),
('4444','10','180'),
('4444','20','10'),
('4444','30','150')


fill Lieferungen:

INSERT INTO Lieferungen(BestellID,Pos,Menge_geliefert)
VALUES
('1111','10','10'),
('1111','20','3'),
('1111','30','40'),
('2222','10','15'),
('3333','10','75'),
('4444','10','180'),
('4444','20','5'),
('4444','30','120'),
('4444','20','3'),
('4444','30','10')


Vielen Dank schon mal im voraus und viele Grüße

Bernd
 

Lesen sie die antworten

#1 Bernd Konle
14/10/2010 - 10:56 | Warnen spam
Hallo,

ich habs noch rausgefunden,
hatte nur falsch gruppiert. Hier das Ergebnis meiner Abfrage:

select
a.BestellID,
a.Pos,
a.Menge_bestellt,
SUM(convert(float,b.Menge_geliefert)) Gesamtliefermenge,

convert(float,a.Menge_bestellt) -
SUM(convert(float,b.Menge_geliefert)) Menge_noch_ausstehend

from Bestellungen a

left join
Lieferungen b
on
b.BestellID = a.BestellID and b.Pos = a.Pos

group by a.BestellID,a.Pos,a.Menge_bestellt

Grüße

Bernd

Ähnliche fragen