通过引用数据过滤SQL-VIEW



a已定义了 view in sql-server 2014 ,该应显示车辆>车辆>车辆>的列表>。这些车辆包含在 Invoices 中。提出每个车辆 invoice 包含一个 ID ,我只想选择车辆>车辆特定发票

到目前为止还不错,但是问题在于我只能过滤 view 数据,而不是SQL本身,即我需要过滤为 ID 发票车辆视图上。因此,车辆视图必须提供有关引用的发票的信息,以便我可以做这样的事情:

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

是否有可能这样做,例如通过一种使用普通的内在join 提供重复条目的情况,没有提供重复的条目?内联机显然会导致车辆在多个 Invoices 中包含在多次时。也应该可以显示所有车辆而不提供 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

我认为您将需要加入车辆并将发票表加在一起。这样的东西:

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

如果使用当前视图,则可能必须重构,或者完全不使用它。

最新更新