Existují případy, kdy se poddotazu nevyhnete, například pokud musíte zahrnout počítané sloupce, které používají data z aktuálního a předchozího řádku. Zvažte tento dotaz, například:
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)
Způsobí to chybu analýzy:
Našel jsem toto vlákno na MSDN, který má řešení. Změnou poddotazu tak, aby vracel sadu namísto skalární hodnoty, jsem byl schopen uložit a spustit následující dotaz.
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)