按引用的数据过滤SQL-View

时间:2017-06-26 13:29:29

标签: sql sql-server

A已在 SQL-Server 2014 中定义了查看,该列表应显示车辆的列表。这些广告系列包含在发票中。建议每个车辆发票包含 ID ,我只想选择包含在车辆中的车辆具体发票

到目前为止一直很好,但问题是我只能过滤查看数据,而不是SQL本身,即我需要过滤 ID 车辆视图上的发票。因此,车辆视图必须提供有关所引用的发票的信息,以便我可以执行以下操作:

select      v.vehicle_id,
            v.vehicle_name,
            ...
from        dbo.Vehicle
where       v.invoice_id = 'XYZ'

是否有可能这样做,例如通过使用普通的 INNER JOIN 提供一种聚合而不提供重复条目?如果 INNER 包含多个发票,则 INNER JOIN 显然会导致车辆多次显示。还应该可以显示所有车辆而不提供 Invoice-ID 过滤器。

编辑1:

VehicleId | VehicleName
1 | TestCar1
2 | TestCar2
3 | TestCar3
InvoiceId | VehicleId
1 | 1
2 | 1
3 | 2
4 | 3
5 | 3

没有过滤器的车辆视图的预期输出:

VehicleId | VehicleName
1 | TestCar1
2 | TestCar2
3 | TestCar3

Invoice-ID == 1 过滤器的车辆视图的预期输出:

VehicleId | VehicleName
1 | TestCar1

1 个答案:

答案 0 :(得分:0)

我认为你需要加入车辆和发票表。像这样:

SELECT
    v.vehicle_id,
    v.vehicle_name
FROM dbo.Vehicle v
INNER JOIN dbo.Invoice i
    ON v.VehicleId = i.VehicleId
WHERE i.InvoiceId = 1

如果使用当前视图无法做到这一点,那么您可能需要重构它,或者完全不使用它。