2012-09-27 7 views
0

에 내가 비율을 포함하는이 테이블로 가입하려는 차원 테이블을하지 테이블

@dimensions 
Dateid Rep Mkt Prodgroup 
201111 002 S 001 
201111 002 R 001 
201111 002 S 002 
201111 002 R 002 
201111 002 S 003 
201111 002 R 003 
201111 002 S 004 
201111 002 R 004 
... 

이있는 경우 모든 다른 값에 가입하세요.

@percentageincrease 
Prodgroup Mkt Percent 
ALL   S 1.05 
ALL   R 1.06 
002   S 1.07 
002   R 1.08 
003   S 1.09 
003   R 1.10 

나는 MktProdgroup에 그들과 합류 할 위치 @dimensions.Prodgroup IN @percentageincrease.Prodgroupnot in이 다음 ALL에 참여하는 경우. 그래서 출력 테이블 내가

on case p.Prodgroup 
    when N'ALL' 
    then d.prodgrpid 
    else p.Prodgrpid = d.prodgrpid 
AND p.Mkt = d.Mkt 

을 시도 내 조인 조건으로

Dateid Rep Mkt Prodgroup Percent 
201111 002 S 001   1.05 // joined on ALL 
201111 002 R 001   1.06 // joined on ALL 
201111 002 S 002   1.07 // joined on 002 
201111 002 R 002   1.08 // joined on 002 
201111 002 S 003   1.09 // joined on 003 
201111 002 R 003   1.10 // joined on 003 
201111 002 S 004   1.05 // joined on ALL 
201111 002 R 004   1.06 // joined on ALL 
... 

것하지만 나에게 @percentageincrease 테이블에 있던 튜플도했다

Dateid Rep Mkt Prodgroup Percent 
201111 002 S 001   1.05 
201111 002 R 001   1.06 
201111 002 S 002   1.07 
201111 002 R 002   1.08 
201111 002 S 002   1.05 //Joined on ALL 
201111 002 R 002   1.06 //Joined on ALL 
201111 002 S 003   1.09 
201111 002 R 003   1.10 
201111 002 S 003   1.05 //Joined on ALL 
201111 002 R 003   1.06 //Joined on ALL 
201111 002 S 004   1.05 
201111 002 R 004   1.06 
... 

했다 ALL 조건에 합류했습니다.

이 쿼리는 SQL Server 2008에서 더 큰 쿼리의 일부로 저장 프로 시저로 실행됩니다.

답변

1

가정 테이블 구조

declare @dimensions table 
    (Dateid varchar(10), Rep varchar(10), Mkt varchar(10),Prodgroup varchar(10)) 
declare @percentageincrease table 
    (Prodgroup varchar(10), Mkt varchar(10), [Percent] decimal(9,5)) 

다음

select 
    d.*, 
    isnull(pinc.[Percent], pincall.[Percent]) 
from @dimensions d 
    left join @percentageincrease pinc 
     on d.Mkt = pinc.Mkt 
     and d.Prodgroup = pinc.Prodgroup 
    left join @percentageincrease pincall 
     on d.Mkt = pincall.Mkt 
     and pincall.Prodgroup ='all' 
+0

에 수정을 [이] (http://sqlfiddle.com/#! 6/7aa65/1) –

+0

@ JohnWoo eh ????? – podiluska

+0

sqlfiddle에서 쿼리를 테스트 한 결과를 확인합니다. http://sqlfiddle.com/#!6/7aa65/1 그런데'Prodgroup'의 데이터 타입을 바꾸는 것을 잊지 마세요 –

1

이 시도 :

select * from 
(
select d.*,p.[Percent] from 
dimensions d inner join percentageincrease p 
on d.Mkt = p.Mkt and d.Prodgroup = p.Prodgroup 

union 

select d.*,p.[Percent] from 
dimensions d join percentageincrease p 
on d.Mkt = p.Mkt and d.Prodgroup not in 
    (select distinct d.Prodgroup from dimensions d inner join percentageincrease p 
    on d.Mkt = p.Mkt and d.Prodgroup = p.Prodgroup) 
    where p.Prodgroup='ALL' 
) a 
order by a.Prodgroup