2013-07-19 2 views
0

열의 값에 따라 두 개의 다른 테이블에서 값을 가져올 수 있습니까? 예를 들어, 최종 사용자가 프로그램에서 선택하는 내용에 따라 0 또는 1을 반환하는 부울 열이있는 테이블이 있습니다. 0은 기본값을 가져와야 함을 의미합니다. 1은 사용자의 데이터를 사용함을 의미합니다.열 값을 기준으로 링크 테이블

내 테이블 Table1이처럼 보였다 경우

Case ID  Boolean 
==================== 
    1    0 
    2    1 
    3    1 
    4    0 
    5    0 

그럼 난 테이블 Default 및 사례 ID를 3과 표 UserDef 4의 해당 데이터에서 케이스 ID를 1,4, 5의 해당 데이터를 가져해야합니다. 그렇다면 이러한 값을 가져 와서 결합하고 사례 ID로 순서를 다시 잡아야하므로 결과 테이블에서 순서를 유지할 수 있습니다.

저는 SQL에 익숙하지 않지만 배우려고합니다. 어떤 도움이나 제안이라도 대단히 감사하겠습니다. 당신의 도움에 미리 감사드립니다. 이 같은

답변

1

뭔가 :

SELECT 
    t1.CaseID 
,CASE WHEN t1.Boolean = 1 THEN dt.Col1 ELSE ut.Col1 END AS Col1 
,CASE WHEN t1.Boolean = 1 THEN dt.Col2 ELSE ut.Col2 END AS Col2 
FROM Table1 t1 
LEFT JOIN DefaultTable dt ON dt.CaseID = t1.CaseID 
LEFT JOIN UserDefTable ut ON ut.CaseID = t1.CaseID 
ORDER BY t1.CaseID 

당신은 두 테이블에 가입 한 후 SELECTCASE을 사용하여 데이터를 표시 할 수에서 어느 쪽을 선택합니다.

옵션 B :

WITH CTE_Combo AS 
(
    SELECT 0 as Boolean, * FROM Default  --replace * with needed columns 
    UNION ALL 
    SELECT 1 AS Boolean, * FROM UserDef  --replace * with needed columns 
) 
SELECT * FROM Table1 t 
LEFT JOIN CTE_Combo c ON t.CaseID = c.CaseID AND t.Boolean = c.Boolean 
ORDER BY t.CaseID 

이 더 간단 수 있습니다 - CTE 인공 열을 추가 두 테이블의 조합을 확인한 다음 CTE 모두 ID 및 플래그 열을 사용하여 테이블을 조인을 사용.

+0

응답 해 주셔서 감사합니다. dt.Col1과 dt.Col2는 해당 데이터 열입니까? 기본 테이블 또는 userdef 테이블의 컬럼 수를 모를 경우 어떻게합니까? 같은 열 수를 갖지만 열 수는 알 수 없습니다. –

+0

@RolandP 옵션 B를 시도해보십시오 *. 두 테이블 모두 작동해야하는 동일한 열이있는 경우 'SELECT *'를 사용하는 것은 좋은 습관은 아니지만 항상 컬럼 이름을 지정해야합니다. –

+0

알기. 불행히도 열은 동적이며 추가되거나 제거 될 수 있습니다. 감사! –

1
SELECT t1.CaseID, 
     ISNULL(td.data, tu.data) userData -- pick data from table_default 
             -- if not null else from table_user 
    FROM table1 t1 
    LEFT JOIN table_default td ON t1.CaseID = td.CaseID -- left join with table_default 
          AND t1.Boolean = 0  -- when boolean = 0 
    LEFT JOIN table_user tu ON t1.CaseID = tu.CaseID -- left join with table_user 
         AND t1.Boolean = 1  -- when boolean = 1 
    ORDER BY t1.CaseID 
관련 문제