2011-12-02 3 views
1

У меня есть следующий 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 

Что я в принципе хочу сделать, это всегда выбрать верхнюю 1 запись из таблицы «VehicleFixedCosts», где VehicleRegID соответствует один в основной запрос. Что здесь происходит, так это то, что он выбирает верхнюю строку перед соединением, поэтому, если регистрация транспортного средства в верхней строке не соответствует той, к которой мы присоединяемся, ничего не возвращает.

Любые идеи? Я действительно не хочу, чтобы иметь использование подзапросов для каждого из столбцов, мне нужно вернуть

ответ

1

Попробуйте это:

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 

Subquery под dt может потребоваться некоторая группировка, но без схемы (и, возможно, выборки данных), это трудно сказать, какой столбец должен быть вовлечен в это.

+0

Я писал тот же запрос: P –

Смежные вопросы