Der er tilfælde, hvor du ikke kan undgå en underforespørgsel, for eksempel hvis du skal inkludere beregnede kolonner, der bruger data fra den aktuelle og den foregående række. Overvej denne forespørgsel, for eksempel:
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)
Det vil forårsage en parsingsfejl:
Jeg fandt denne tråd på MSDN, der har en løsning. Ved at ændre underforespørgslen, så den returnerer et sæt i stedet for en skalarværdi, var jeg i stand til at gemme og køre følgende forespørgsel.
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)