Ada kasus ketika Anda tidak dapat menghindari subkueri, misalnya jika Anda harus menyertakan kolom terhitung yang menggunakan data dari baris saat ini dan sebelumnya. Pertimbangkan kueri ini, misalnya:
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)
Ini akan menyebabkan kesalahan penguraian:
Saya menemukan utas ini pada MSDN yang memiliki solusi. Dengan mengubah subkueri sehingga mengembalikan satu set alih-alih nilai skalar, saya dapat menyimpan dan menjalankan kueri berikut.
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)