Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso fazer essa consulta no SQL Server Compact Edition?


Há casos em que você não pode evitar uma subconsulta, por exemplo, se tiver que incluir colunas calculadas que usam dados da linha atual e da linha anterior. Considere esta consulta, por exemplo:
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)

Isso causará um erro de análise:

Encontrei este tópico no MSDN que tem uma solução alternativa. Ao alterar a subconsulta para que ela retorne um conjunto em vez de um valor escalar, consegui salvar e executar a consulta a seguir.
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)