Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je effectuer cette requête dans SQL Server Compact Edition ?

Dans certains cas, vous ne pouvez pas éviter une sous-requête, par exemple si vous devez inclure des colonnes calculées qui utilisent des données de la ligne actuelle et de la ligne précédente. Considérez cette requête, par exemple :

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)

Cela provoquera une erreur d'analyse :

J'ai trouvé ce fil sur MSDN qui a une solution de contournement. En modifiant la sous-requête afin qu'elle renvoie un ensemble au lieu d'une valeur scalaire, j'ai pu enregistrer et exécuter la requête suivante.

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)