2017-06-26 36 views
1

一個已經在SQL-服務器2014,這應該顯示車輛列表定義的查看。這些車輛包含在發票。提議每個車輛發票包含ID,我想選擇僅車輛被包含在特定發票過濾器的SQL視圖通過引用的數據

到目前爲止好,但問題是,我只能過濾查看數據,而不是SQL本身,即我需要爲發票ID篩選的車輛,查看。因此,車載查看必須提供關於引用發票的信息,這樣我可以做這樣的事情:

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

有沒有可能做到這一點,例如通過使用正常的INNER JOIN來提供一種聚合而不提供重複條目? INNER JOIN顯然會導致車輛被顯示倍增時間,如果它包含在一個以上發票。也應該可以顯示所有車輛而不提供發票ID過濾器。

EDIT 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 

預期輸出車輛 - 視圖發票-ID == 1過濾器:

VehicleId | VehicleName 
1 | TestCar1 

回答

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 

如果使用當前的看法是不可能的,那麼你可能要重構它,或者只是不完全使用它。