Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich diese Abfrage in SQL Server Compact Edition durchführen?

Es gibt Fälle, in denen Sie eine Unterabfrage nicht vermeiden können, beispielsweise wenn Sie berechnete Spalten einbeziehen müssen, die Daten aus der aktuellen und der vorherigen Zeile verwenden. Betrachten Sie zum Beispiel diese Abfrage:

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)

Es wird einen Parsing-Fehler verursachen:

Ich habe diesen Thread gefunden auf MSDN, das eine Problemumgehung hat. Indem ich die Unterabfrage so geändert habe, dass sie einen Satz anstelle eines Skalarwerts zurückgibt, konnte ich die folgende Abfrage speichern und ausführen.

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)