SQL-Server 2008 - Common Table Expression

meak

New Member
Hallo,

ich beschäftige mich im Moment mit Common Table Expressions und versuche mich an einem Problem, welches sich meiner Meinung nach gut mit einer CTE lösen lässt.

Die Tabelle Products hat folgenden Aufbau:

product |category | price
----------------------------
a | 1 | 20.00
b | 1 | 15.00
c | 1 | 100.00
d | 2 | 8.00
e | 2 | 10.00


Die Tabelle CategoryAccounts sieht so aus:

categoryID | amount
----------------------------
1 | 40.00
2 | 10.00


Zu jeder Kategory kann ein Nutzer einen Betrag einzahlen, um die Produkte freigeben zu können. Dabei können zu jeder Kategorie nur so viele Produkte freigegeben werden, wie Geld eingezahlt wurde. Die Reihenfolge der Freigabe ist bereits so wie in dem obigen Beispiel. Es kann also nur zuerst Produkt a freigegeben werden und dann Produckt b.

Wenn der Nutzer also auf das Konto für Kategorie 1 einen Betrag von 40 € und für Kategorie 2 einen Betrag von 10 € einzahlt, so soll durch eine Abfrage (mit CTE) eine Menge Products2Confirm entstehen, die so aussieht:

product |category | price
----------------------------
a | 1 | 20.00
b | 1 | 15.00
d | 2 | 8.00

Die Menge besteht aus den Produkten a und b der Kategorie 1, da die 40 € genug sind, um die beiden Produkte freizugeben (35 €). Aus Kategorie ist nur das Produkt d in der Menge enthalten, da durch die eingezahlten 10 € lediglich dieses Produkt ausgewählt wurde. Da die Reihenfolge so vorgeben ist, spielt es keine Rolle, dass alternativ Produkt e in Frage kommt. Die 10 € sind bereits durch Produkt d (8 €) fast vollständig aufgebraucht.

So, ich hoffe, ich habe mein Problem gut erläutert. Ich selbst stelle mir dazu eine CTE vor, welche die Menge der Tabelle Products durchläuft und den Kontostand der Tabelle CategoryAccounts so lange vermindert, bis dieser für das darauffolgende Produkt nicht mehr aussreicht.

Für Idee oder Anregungen bedanke ich mich sehr!
 
Back
Top