Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come posso eseguire questa query in SQL Server Compact Edition?

Ci sono casi in cui non puoi evitare una sottoquery, ad esempio se devi includere colonne calcolate che utilizzano i dati della riga corrente e precedente. Considera questa query, ad esempio:

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)

Causerà un errore di analisi:

Ho trovato questo thread su MSDN che ha una soluzione alternativa. Modificando la sottoquery in modo che restituisca un set invece di un valore scalare, sono stato in grado di salvare ed eseguire la query seguente.

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)