2011-12-02 53 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 

我基本上想要做的始终是从“VehicleFixedCosts”表,其中VehicleRegID相匹配的在选择前1纪录主要查询。这里发生的事情是在连接之前选择最上面一行,所以如果最上面一行的车辆注册与我们加入的不匹配,它将不会返回任何内容。

任何想法?我真的不希望有使用子查询的每一个我需要返回

回答

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 

子查询下方dt可能需要一些分组,但没有架构(也许样本数据),它是很难说哪个专栏应该参与其中。

+0

我在写完全相同的查询:P –