메인 테이블, 창고, 고객 및 회사의 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)
나는 내가 놓친 작은 구문 오류로이 권리를하고 있는가 :
다음 쿼리는 단어 '의 경우'근처에서 오류가 발생? 그렇지 않다면 거기에 다른 방법이 있습니까?
감사합니다.
하나의 방법은 그것을 할, 동적 쿼리입니다! 하지만 당신은 그것에 대한 저장된 proc을 사용해야합니다 –
동적 SQL은 조건이 각 라인에 특정이기 때문에 도움이되지 않습니다 – jazzytomato