有人可以建议如何合并下面的这两个结果集/表,以便实现预期的输出。
currentPrice
值将优先于PriceChangedTable
,如果StatusChangedTable
不可用。 Null是有效值。
status
值将优先于StatusChangedTable
,如果PriceChangedTable
不可用
PriceChangedTable:
Id vehicle currentPrice status
---------------------------------------------
1 toyota 50000 Available
2 nisaan null Available
3 bmw 30000 Pending
StatusChangedTable:
Id vehicle currentPrice status
---------------------------------------------
1 toyota null NotAvailable
3 bmw 40000 NotAvailable
4 dodge 50000 Pending
合并上述2个表的输出:
Id vehicle currentPrice status
---------------------------------------------
1 toyota 50000 NotAvailable
2 nisaan null Available
3 bmw 30000 NotAvailable
4 dodge 50000 Pending
请不要判断桌上的设计技巧。
答案 0 :(得分:0)
此查询将返回预期输出:
select
p.Id
,p.vehicle
,p.currentPrice
-- status value priority 1) StatusChangedTable, 2) PriceChangedTable
,case when s.Id is not null then s.status else p.status end as status
from PriceChangedTable p
left join StatusChangedTable s on p.Id = s.Id
union
select
s.Id
,s.vehicle
-- currentPrice value priority 1) PriceChangedTable, 2) StatusChangedTable
,case when p.Id is not null then p.currentPrice else s.currentPrice end as currentPrice
,s.status
from StatusChangedTable s
left join PriceChangedTable p on p.Id = s.Id
答案 1 :(得分:0)
尝试使用其他样本数据,
SELECT isnull(pc.Id, sc.id) id
,isnull(pc.vehicle, sc.vehicle) vehicle
,isnull(pc.currentPrice, sc.currentPrice) currentPrice
,isnull(sc.[status], pc.[status]) [status]
FROM @PriceChnagedTable PC
FULL OUTER JOIN @StatusChangedTable SC ON pc.id = sc.Id