von Barlee » Fr, 10.08.2007 20:29
Hallo BaseUser,
Gern geschehen! Es freut mich, wenn ich helfen konnte.
Vielleicht ein paar Tips, die beim eigenen analysieren helfen können.
Die gesamte Abfrage besteht aus mehreren "kleinen" Abfragen inkl. Unterabfragen. Die kleineren Abfragen liefern Ergebnistabellen, denen ein Alias (x, c, y) zugewiesen wurde. Führe diese am besten einmal separat aus und schaue Dir das Ergebnis an.
Diese Ergebnistabellen werden anschließend benutzt, um darüber erneut abzufragen und auf darin enthaltene Werte (z.b. x.Rest, y.Minimum, c.Rest) zurückzugreifen, wobei bspw. y.Minimum für die Spalte "Minimum" in der Ergebnistabelle "y" steht.
Zur Arbeitsweise:
Abfrage mit Alias x
Stichwort Self-Join, dieselbe Ausgangstabelle wird zweimal abgefragt.
Hier werden zusätzlich zu den bestehenden Tabellenpalten zwei neue erzeugt, "Summe" und "Rest". Dabei enthält "Summe" -wie der Name schon sagt- die Aufsummierung aller bisherigen Werte. Die Spalte "Rest" wird genauso wie "Summe" berechnet. Jedoch wird vom jeweiligen Ergebnis 14 subtrahiert, da Dein Schwellenwert mit 14 angegeben war. Erreiche ich in dieser Spalte Ergebnisse grösser Null, dann ist der Schwellenwert überschritten. Weil Ergebnisse kleiner gleich Null daher uninteressant sind (Schwellenwert nicht überschritten), schränkt die WHERE-Klausel die Ergebnisse auf größer Null ein. Beachte, dass die Anweisungen für "Summe", "Rest" und die in der WHERE Klausel zu großen Teilen identisch sind!
Abfrage mit Alias c
Identisch mit x!! Keine neuen Anweisungen! Sie beschränkt sich lediglich auf die Ergebnisspalte "Rest", um darüber dann das Minimum bilden zu können. Die Spalten "ID", "Werte", "Rest" sind hier nur weggelassen worden.
Abfrage mit Alias y
Diese ermittelt nun das Minimum der Spalte "Rest" aus voriger Abfrage. Dieses Minimum steht in der Zeile, in der als erstes Dein definierter Schwellenwert überschritten wurde.
---
So, was haben wir jetzt:
1) Eine Ergebnistabelle (x) mit den Werten Deiner Ausgangstabelle inkl. Summe und Rest bis zum Schwellenwert
2) Eine Ergebnistabelle (y) mit dem Wert von "Rest", an dem die Schwelle überschritten wird.
Nun naht das Ende ...
Formulieren kann man jetzt: Gib mir alles aus Ergebnistabelle x zurück, bei dem der Wert in Spalte "Rest" gleich dem ist, der in Ergebnistabelle y steht (und da steht nur einer). Das geschieht durch das äußere SELECT und abschließender WHERE-Klausel.
Also BaseUser, alles keine Hexerei. Du wirst sehen, so schwer ist das gar nicht.
Ich wünsche weiterhin viel Erfolg!
Gruss Barlee
Hallo BaseUser,
Gern geschehen! Es freut mich, wenn ich helfen konnte.
Vielleicht ein paar Tips, die beim eigenen analysieren helfen können.
Die gesamte Abfrage besteht aus mehreren "kleinen" Abfragen inkl. Unterabfragen. Die kleineren Abfragen liefern Ergebnistabellen, denen ein Alias (x, c, y) zugewiesen wurde. Führe diese am besten einmal separat aus und schaue Dir das Ergebnis an.
Diese Ergebnistabellen werden anschließend benutzt, um darüber erneut abzufragen und auf darin enthaltene Werte (z.b. x.Rest, y.Minimum, c.Rest) zurückzugreifen, wobei bspw. y.Minimum für die Spalte "Minimum" in der Ergebnistabelle "y" steht.
Zur Arbeitsweise:
[b]Abfrage mit Alias x[/b]
Stichwort Self-Join, dieselbe Ausgangstabelle wird zweimal abgefragt.
Hier werden zusätzlich zu den bestehenden Tabellenpalten zwei neue erzeugt, "Summe" und "Rest". Dabei enthält "Summe" -wie der Name schon sagt- die Aufsummierung aller bisherigen Werte. Die Spalte "Rest" wird genauso wie "Summe" berechnet. Jedoch wird vom jeweiligen Ergebnis 14 subtrahiert, da Dein Schwellenwert mit 14 angegeben war. Erreiche ich in dieser Spalte Ergebnisse grösser Null, dann ist der Schwellenwert überschritten. Weil Ergebnisse kleiner gleich Null daher uninteressant sind (Schwellenwert nicht überschritten), schränkt die WHERE-Klausel die Ergebnisse auf größer Null ein. Beachte, dass die Anweisungen für "Summe", "Rest" und die in der WHERE Klausel zu großen Teilen identisch sind!
[b]Abfrage mit Alias c[/b]
Identisch mit x!! Keine neuen Anweisungen! Sie beschränkt sich lediglich auf die Ergebnisspalte "Rest", um darüber dann das Minimum bilden zu können. Die Spalten "ID", "Werte", "Rest" sind hier nur weggelassen worden.
[b]Abfrage mit Alias y[/b]
Diese ermittelt nun das Minimum der Spalte "Rest" aus voriger Abfrage. Dieses Minimum steht in der Zeile, in der als erstes Dein definierter Schwellenwert überschritten wurde.
---
So, was haben wir jetzt:
1) Eine Ergebnistabelle (x) mit den Werten Deiner Ausgangstabelle inkl. Summe und Rest bis zum Schwellenwert
2) Eine Ergebnistabelle (y) mit dem Wert von "Rest", an dem die Schwelle überschritten wird.
Nun naht das Ende ...
Formulieren kann man jetzt: Gib mir alles aus Ergebnistabelle x zurück, bei dem der Wert in Spalte "Rest" gleich dem ist, der in Ergebnistabelle y steht (und da steht nur einer). Das geschieht durch das äußere SELECT und abschließender WHERE-Klausel.
Also BaseUser, alles keine Hexerei. Du wirst sehen, so schwer ist das gar nicht.
Ich wünsche weiterhin viel Erfolg!
Gruss Barlee