2017-02-27 1 views
0

예상되는 결과를 얻을 수 있도록 아래의 두 결과 집합/테이블을 병합하는 방법을 제안 할 수 있습니까?같은 열을 사용하지만 선택 값이 다른 2 개의 테이블을 병합

  • currentPrice 값은 PriceChangedTable에서 우선 순위를 가지고 가고, StatusChangedTable에서 사용 가능한 경우되지 않습니다. Null은 유효한 값입니다.

  • statusStatusChangedTable에서 우선시 한 경우 사용할 수없는 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 
관련 문제