Autor Beitrag
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 11.10.02 15:05 
Hallo,
mein Problem ist etwas komplex:
Ich habe drei Tabellen: Artikel, Aufträge und Kunden.

In der Auftragsansicht werden diese mit Left Outer Joins zusammengesetzt (damit ich auch Name des Kunden usw hab). Ein Auftrag kann aus mehreren Artikeln bestehen, deswegen habe ich einen Auftrag für jeden Artikel, die dann über eine gemeinsame GID (sog. Group-ID) zusammengesetzt werden.

Jetzt möchte ich für die Auftragsansicht folgendes realisieren:
Für jede Auftragsgruppe, also gleiche GID, soll nur ein Datensatz angezeigt werden, dieser soll aber die Gesamtkosten der Einzelartikel zusammenrechnen.

Folgendes habe ich mal probiert:

ausblenden Quelltext
1:
2:
3:
4:
5:
SELECT auftr.gid AS Auftrag, (SELECT SUM(Gesamt) FROM auftraege WHERE GID=auftr.gid) AS Gesamt,
knd.name, knd.vorname
FROM auftraege auftr
LEFT OUTER JOIN kunden knd ON auftr.kunde=knd.knr
ORDER BY auftr.GID;


Habe schon alles mögliche probiert das klappt alles net, vll. hat jemand eine Idee? Verwende übrigens Interbase 6 OS

Danke im Voraus.

Uwe
UGrohne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 11.10.02 16:31 
OK, hat sich erledigt, habs selbst rausgefunden.

Das Problem war, dass Select Distinct nicht funktioniert hat, wegen der Summenberechnung. Ich habe jetzt ein View erzeugt und dieses dann mit SELECT DISTINCT * FROM groupedauftr aufgerufen, jetzt funktioniert das einwandfrei.

Trotzdem danke.....

*g*
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Sa 12.10.02 13:14 
Hi,

deine Lösung scheint ja zu klappen, aber rein prinzipiell hast du einen strukturellen Fehler in deiner Datenbank. Normalerweise trennst du deine Auftraege Tabelle auf in 2 einzelne. Nenn die 1. Auftrag wo du nur auftragspezifische Dinge drin beinhaltest (z.B. Kundennr, Auftragnr, Datum...), und erstell eine 2. die du bsp. "Positionen" nennst, welche über einen Schlüssel mit der Tabelle Auftrag verknüpft, und ansonsten artikelspezifische Dinge enthält, wie z.B. Artikelpreis, Beschreibung, Anzahl usw.)...

Der Grund für diese Aufpsaltung sind eigentlich 2:
- Zum einen hast du in deiner Struktur wahrscheinlich Daten redundant gespeichert, und
- zum anderen wird deine Abfrage wesentlich einfacher und vor allem auch schneller (Stichwort "group by" in deiner Select Abfrage).

Gruss,
Tom
UGrohne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Sa 12.10.02 19:56 
Damit hast Du schon recht, das einzige Problem bei der Sache ist, dass ich meinem Kunden nicht zumuten kann, eine fast neue DB-Struktur aufzubauen, erstens dauert es zu lange, zweitens muss ich dann erstmal noch ein Konvertierungstool beilegen, damit keine Daten verloren gehen.

Anfangs wollte er eben Einzelpositionen, jetzt will er Auftragsgruppen und da ist meine Anpassung zeitlich von Vorteil. Es muss bei dem halt alles so schnell wie möglich auf seiner Platte sein....

Typisch Kunden eben, 5 vor 12 angerannt kommen und dann auch noch meckern, wenns 5 vor immer noch net da ist. :lol:

Trotzdem danke für den Tipp, das kommt dann in die Verkaufsversion rein *g*