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.Prodgroup、そしてもしそうならnot in、ALLに参加したいと思います。したがって、出力テーブルは次のようになります。

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
...

私の参加条件として私は試しました

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
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
...

@percentageincreaseテーブルにあったタプルもALL条件で結合されました。

これは、SQL Server 2008で、より大きなクエリの一部としてストアドプロシージャとして実行されています。

4

2 に答える 2

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 
于 2012-09-27T09:59:46.043 に答える
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'  
于 2012-09-27T09:18:36.700 に答える