Reputation: 2117
I am using sql server and using ANSI-89 standard.
transport type is a join with the transport table on transporttypecode. the order or orderitem is joined with the transport table on transportcode.
How do I do a conditional join, if that is possible to get the transport type name for each order item, what is the right approach to use here so that I can pick the transport_code on order or order_item accordingly and join with transport table?
Order
-----
orderNo (PK)
country NOT NULL
transportCode NULL
OrderItems
----------
OrderNo (PK)
orderItemNo (PK)
transport_code NULL
Transport
---------
trasportcode (PK)
transportname NOT NULL
transporttypecode NOT NULL
transportType
-------------
transporttypecode (PK)
transporttypename NOT NULL
SAMPLE DATA
Order
OrderNo Country TransportCode
1 USA ST1
2 ENGLAND
Order Item
Order No orderItemNo itemname transportCode
1 1 cooker ST2
1 2 scissor
2 1 stapler
2 2 pencil ST3
2 3 bottle
Transport
transportcode name transporttypecode
ST1 INS BUTTERFLY W
ST2 LUFTHANSA A
ST3 TRANS SIBERIAN RAIL RL
TransportType
Transporttypecode name
W Water
A Air
RL Rail
Output
Order No orderItemNo itemname transportName transporttypeName
1 1 cooker LUFTHANSA Air
1 2 scissor INS BUTTERFLY Water
2 1 stapler
2 2 pencil TRANS SIBERIAN RAIL Rail
2 3 bottle
Upvotes: 0
Views: 52
Reputation: 1270713
One method uses coalesce()
in the on
clause:
select oi.*, t.transportName, t.transporttypeName
from orderitems oi join
orders o
on oi.ordernum = o.ordernum left join
transport t
on t.transportcode = coalesce(oi.transportcode, o.transportcode) left join
TransportType tt
on tt.Transporttypecode = t.Transporttypecode;
Upvotes: 1