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
答案 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
如果使用当前视图无法做到这一点,那么您可能需要重构它,或者完全不使用它。