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
如果使用当前视图,则可能必须重构,或者完全不使用它。