2016-07-14 3 views
1

첫 번째 조인의 결과가 비어있는 경우에만 두 번째 테이블에 조인하고 싶습니다.첫 번째 테이블에 값이없는 경우 두 번째 테이블에 조인

ID Metro Submarket 
1 NYC  Manhattan 
2 NYC  Brooklyn 
3 NYC  Queens 
4 NYC  Bronx 
5 NYC  Newark 

나는 조인을 위해 사용하고 테이블은 다음과 같습니다 :

Table B           Table C   
Metro Submarket A.Price B.Price C.Price  Metro A.Price B.Price C.Price 
NYC  Manhattan 54  32  48   NYC  50  49  69 
NYC  Queens  35  39  59   Philly 49  48  37 
NYC  Brooklyn 20  49  58   Chicago 20  48  36 
NYC  Bronx  49  30  20     
NYC  Newark  49  50  - 

내가 표 A에 표 B에서 가격 열을 추가 있어요에 따라 아래 표의 하위 섹션은 데이터입니다 지하철과 하위 시장이 일치합니다. 그러나 표 B에는 모든 가격이 나와 있지 않습니다. 표 B에서 일치하는 항목을 찾을 수없는 경우 표 C에서 Metro에서만 일치하는 항목을 확인하려고합니다.

ID 5의 경우 표 B에서 A와 B 가격을 찾을 수 있습니다. 그러나 C 가격은 비어 있습니다. 이 경우, 표 C에서 C 가격을 검색하기를 원합니다 (69는 선택할 것입니다).

SAS 9.4를 사용하고 있습니다. SQL, 매크로 또는 SAS가 처리 할 수있는 다른 어떤 것도 환영합니다!

답변

7

두 테이블을 주 테이블에 조인 할 수 있으며 단순히 COALESCE()을 사용할 수 있습니다. 이것은 그렇지 않으면 Table C 당신에게 가치를 줄 것이다 당신에게 Table B에 존재하는 경우 값을 줄 것이다 :

PROC SQL; 

CREATE TABLE Output AS 

SELECT 
    ta.ID, 
    ta.Metro, 
    ta.Submarket, 
    COALESCE(tb.A_Price,tc.A_Price) AS A_Price, 
    COALESCE(tb.B_Price,tc.B_Price) AS B_Price, 
    COALESCE(tb.C_Price,tc.C_Price) AS C_Price 
FROM 
    tablea ta 
LEFT JOIN 
    tableb tb 
    ON (tb.Metro = ta.Metro) 
    AND (tb.Submarket = ta.Submarket) 
LEFT JOIN 
    tablec tc 
    ON (tc.Metro = ta.Metro); 

QUIT; 
+0

이 일을 그! 당신의 도움을 주셔서 감사합니다! – user3910919

관련 문제