2017-02-27 8 views
0

期待される出力が得られるように、以下の2つの結果セット/テーブルをマージする方法を提案できますか?同じ列であるが選択値の異なる2つのテーブルをマージする

  • 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:上記の2をマージから

Id vehicle  currentPrice status 
    --------------------------------------------- 
    1 toyota  null   NotAvailable 
    3 bmw   40000   NotAvailable 
    4 dodge  50000   Pending 

出力テーブル:

Id vehicle  currentPrice status 
    --------------------------------------------- 
    1 toyota  50000   NotAvailable 
    2 nisaan  null   Available 
    3 bmw   30000   NotAvailable 
    4 dodge  50000   Pending 

テーブルデザインスキルを判断しないでください。

答えて

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 
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 
関連する問題