2014-10-09 2 views
0

메인 테이블, 창고, 고객 및 회사의 4 가지 테이블이 있습니다. 이 테이블의내부 결합시 케이스

스키마는 :

create table MainTable(ID int, Warehouse_id int, Customer_ID int) 
create table Warehouse (Warehouse_id int, company_id int) 
create table Customer (Customer_ID int, Company_ID int) 
create table company (Company_id int, Country_ID int, Zone_ID int) 

OBJECTIF은 (MainTable의) 해당 ID의 Country_ID 및 Zone_ID를 얻는 것입니다.

우리는 2 개의 다른 경우가 있습니다 A (필드 COMPANY_ID에) 회사 테이블에 가입 한 후 if MainTable.Warehouse_ID 우리는 내부가 (필드 만약 warehouse_id에)웨어 하우스 테이블에 가입해야 null는 아니고, 는 else가 MainTable.Warehouse_ID가 null (경우를) 고객 테이블 (Customer_ID 필드)과 회사 테이블 (Company_ID 필드)에서 내부 조인을 수행해야합니다.

select CO.Country_ID, CO.Zone_ID 
from MainTable MT 
inner join (case 
    when MT.Warehouse_ID is not null 
then 
     Warehouse W on MT.Warehouse_ID=W.Warehouse_ID 
     inner join Company CO on W.Company_ID=CO.Company_ID 
else  
     Customer Cu on MT.Customer_ID=Cu.Customer_ID 
     inner join Company C on Cu.Company_ID=CO.Company_ID 
    end) 

나는 내가 놓친 작은 구문 오류로이 권리를하고 있는가 :

다음 쿼리는 단어 '의 경우'근처에서 오류가 발생? 그렇지 않다면 거기에 다른 방법이 있습니까?

감사합니다.

+0

하나의 방법은 그것을 할, 동적 쿼리입니다! 하지만 당신은 그것에 대한 저장된 proc을 사용해야합니다 –

+0

동적 SQL은 조건이 각 라인에 특정이기 때문에 도움이되지 않습니다 – jazzytomato

답변

-1

수 없습니다. 이러한 종류의 조건부 조인을 사용하면 출력이이 될 것이라고 기대하십니까?

외부 조인을 사용해 보셨습니까?

select ISNULL(C1.Country_ID,C2.Country_ID) as Country_ID,ISNULL(C1.Zone_ID,C2.Zone_ID) as Zone_ID 
from MainTable MT 
left outer join Warehouse W on MT.Warehouse_ID=W.Warehouse_ID 
left outer join Company1 C1 on W.Company_ID=C1.Company_ID 
left outer join Customer Cu on MT.Customer_ID=Cu.Customer_ID 
left outer join Company2 C2 on Cu.Company_ID=C2.Company_ID 
+0

무엇을 제발 제발? – jazzytomato

+1

도와 주셔서 감사합니다. 토마스, 왼쪽 외부 조인과 함께 :) – user3569267

1

당신은 UNION를 사용할 수 있습니다

SELECT CO.Country_ID, CO.Zone_ID 
    FROM MainTable MT 
    INNER JOIN Warehouse W ON MT.Warehouse_ID=W.Warehouse_ID 
    INNER JOIN Company CO on W.Company_ID=CO.Company_ID 
    WHERE MT.Warehouse_ID IS NOT NULL 
UNION 
SELECT CO.Country_ID, CO.Zone_ID 
    FROM MainTable MT 
    INNER JOIN Customer Cu ON MT.Customer_ID=Cu.Customer_ID 
    INNER JOIN Company CO on Cu.Company_ID=CO.Company_ID 
    WHERE MT.Warehouse_ID IS NULL 
1

다음과 같이 뭔가를보십시오 :

IF EXISTS(SELECT 1 
      FROM MainTable mt 
      WHERE mt.Warehouse_ID IS NOT NULL) 
    BEGIN 
     SELECT CO.Country_ID, 
      CO.Zone_ID 
     FROM MainTable MT 
      INNER JOIN Warehouse W 
        ON MT.Warehouse_ID = W.Warehouse_ID 
      INNER JOIN Company CO 
        ON W.Company_ID = CO.Company_ID 
    END 
ELSE 
    BEGIN 
     SELECT CO.Country_ID, 
      CO.Zone_ID 
     FROM MainTable MT 
      INNER JOIN Customer Cu 
        ON MT.Customer_ID = Cu.Customer_ID 
      INNER JOIN Company C 
        ON Cu.Company_ID = CO.Company_ID 
    END 
관련 문제