2011-12-02 16 views
1

I次のSQLクエリを持っている:SQL - 派生テーブル問題

SELECT VehicleRegistrations.ID, VehicleRegistrations.VehicleReg, 
     VehicleRegistrations.Phone, VehicleType.VehicleTypeDescription, 
     dt.ID AS 'CostID', dt.IVehHire, dt.FixedCostPerYear, dt.VehicleParts, 
     dt.MaintenancePerMile, dt.DateEffective 
FROM VehicleRegistrations 
INNER JOIN VehicleType ON VehicleRegistrations.VehicleType = VehicleType.ID 
LEFT OUTER JOIN (SELECT TOP (1) ID, VehicleRegID, DateEffective, IVehHire, 
        FixedCostPerYear, VehicleParts, MaintenancePerMile 
        FROM VehicleFixedCosts 
        WHERE (DateEffective <= GETDATE()) 
        ORDER BY DateEffective DESC) AS dt 
ON dt.VehicleRegID = VehicleRegistrations.ID 

私は基本的に常にVehicleRegIDが1つに一致する「VehicleFixedCosts」テーブルからトップ1レコードを選択されてやりたいですメインクエリ。ここで起こっていることは、参加前に一番上の行を選択していることです。したがって、一番上の行の車両登録が一致しない場合は、何も返されません。

アイデア?それはだdt

SELECT vr.ID, vr.VehicleReg, 
     vr.Phone, VehicleType.VehicleTypeDescription, 
     dt.ID AS 'CostID', dt.IVehHire, dt.FixedCostPerYear, dt.VehicleParts, 
     dt.MaintenancePerMile, dt.DateEffective 
FROM VehicleRegistrations vr 
INNER JOIN VehicleType ON vr.VehicleType = VehicleType.ID 
LEFT OUTER JOIN (
    SELECT ID, VehicleRegID, DateEffective, IVehHire, FixedCostPerYear, VehicleParts, MaintenancePerMile 
    FROM VehicleFixedCosts vfc 
    JOIN (
     select VehicleRegID, max(DateEffective) as DateEffective 
     from VehicleFixedCosts 
     where DateEffective <= getdate() 
     group by VehicleRegID 
    ) t ON vfc.VehicleRegID = t.VehicleRegID and vfc.DateEffective = t.DateEffective 
) AS dt 
ON dt.VehicleRegID = vr.ID 

サブクエリは、いくつかのグループ化を必要とするが、スキーマなしで(そしておそらくサンプルデータ)かもしれません:私は本当に私は

答えて

1

はこれを試してみてください戻すために必要な列ごとに使用する副選択を持っている必要はありませんどの列がそれに関与すべきかを言うのは難しいです。

+0

私は全く同じクエリを書いていました:P –