Ik maak gebruik van een datastructuur waaruit ik alle orders wil selecteren. Nu is het zo dat aan elke order een aantal deliveries gekoppeld zit, en aan die deliveries weer een lijst met products. Ik wil bij mijn order-SELECT ook de totale kosten van de order laten zien. Nou gaat dat prima als ik de volgende query gebruik:
Alleen zit hier slechts de prijs van de producten bij. Ik wil ook de verzendkosten erbij rekenen. Ik krijg maar geen goede query bedacht om die er ook bij te betrekken.
Ik heb een aantal tabellen, waarvan ik even de relevante velden post:
orders
orderId
deliveries
deliveryId
postalCodeNumber
deliveries_products
deliveryId
productId
products
productId
cost
deliveryCharge_postalCodes
pcRangeStart
pcRangeEnd
deliveryCost
Ik heb al iets met subquerys geprobeerd, en ook het volgende:
maar dat werkt allemaal niet. In de deliveryCharge_postalCodes tabel staat momenteel 1 record: aan PC's 1-9999 moet 3,50 worden gekoppeld. Ik krijg bij bovenstaande query 17,50 terug als totalCost bij een order waarbij de producten gratis zijn en er 2 deliveries in het spel zijn.
Iemand enige suggesties? Ik gebruik overigens MS SQL Server 2000.
SQL:
1
2
3
4
5
6
7
8
9
| SELECT o.orderId SUM(p.cost) AS totalCost FROM orders AS o LEFT JOIN deliveries AS d ON (d.orderId = o.orderId) LEFT JOIN deliveries_products AS dp ON (dp.deliveryId = d.deliveryId) LEFT JOIN products AS p ON (p.productId = dp.productId) GROUP BY o.orderId |
Alleen zit hier slechts de prijs van de producten bij. Ik wil ook de verzendkosten erbij rekenen. Ik krijg maar geen goede query bedacht om die er ook bij te betrekken.
Ik heb een aantal tabellen, waarvan ik even de relevante velden post:
orders
orderId
deliveries
deliveryId
postalCodeNumber
deliveries_products
deliveryId
productId
products
productId
cost
deliveryCharge_postalCodes
pcRangeStart
pcRangeEnd
deliveryCost
Ik heb al iets met subquerys geprobeerd, en ook het volgende:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT o.orderId (SUM(p.cost) + SUM(dcp.deliveryCost)) AS totalCost FROM orders AS o LEFT JOIN deliveries AS d ON (d.orderId = o.orderId) LEFT JOIN deliveries_products AS dp ON (dp.deliveryId = d.deliveryId) LEFT JOIN products AS p ON (p.productId = dp.productId) LEFT JOIN deliveryCharge_postalCodes AS dcp ON (d.postalCodeNumber > dcp.pcRangeStart - 1 AND d.postalCodeNumber < dcp.pcRangeEnd + 1) GROUP BY o.orderId |
maar dat werkt allemaal niet. In de deliveryCharge_postalCodes tabel staat momenteel 1 record: aan PC's 1-9999 moet 3,50 worden gekoppeld. Ik krijg bij bovenstaande query 17,50 terug als totalCost bij een order waarbij de producten gratis zijn en er 2 deliveries in het spel zijn.
Iemand enige suggesties? Ik gebruik overigens MS SQL Server 2000.
[ Voor 2% gewijzigd door Eelke Spaak op 14-08-2004 14:44 . Reden: anti layout verneuk ]