Er zijn gevallen waarin u een subquery niet kunt vermijden, bijvoorbeeld als u berekende kolommen moet opnemen die gegevens uit de huidige en de vorige rij gebruiken. Beschouw deze vraag bijvoorbeeld:
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date =
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)
Het zal een parseerfout veroorzaken:
Ik vond deze thread op MSDN met een tijdelijke oplossing. Door de subquery te wijzigen zodat deze een set retourneert in plaats van een scalaire waarde, kon ik de volgende query opslaan en uitvoeren.
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date IN
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)