2013-04-11 142 views
0

我有一个场景,我想用交叉引用表中的另一个值覆盖值。它们可以是通用覆盖或组合特定覆盖。我的对照表如下所示:左外部连接返回重复

SEDOL Portfolio Override 
1  1   Technology 
1  2   Financial 
1  NULL   Industrial 
2  NULL   Technology 
3  NULL   Financial 

如果投资组合为NULL,则它是一个普遍的覆盖,如果它有一个投资组合号码,然后它是一个投资组合的具体覆盖。

所以后来我的选择是这样的:

SELECT 
      Portfolio 
     , SEDOL 
     , CASE 
       WHEN hack.SEDOL = ia.SEDOL AND hack.Portfolio = ia.Portfolio THEN hack.Override -- Portfolio Specific Hack 
       WHEN hack.SEDOL = ia.SEDOL AND hack.Portfolio IS NULL THEN hack.Override    -- Hack for all portfolio's 
       ELSE ia.Sector 
      END 

FROM positions as ia 

    LEFT OUTER JOIN DP_CrossReference AS hack -- Override/Hacks 
      ON hack.SEDOL = ia.SEDOL 
      AND (hack.Portfolio = ia.Portfolio OR hack.Portfolio IS NULL) 

我似乎然而,要得到重复投资组合1,其中被返回的特定组合覆盖和普遍覆盖正在返回SEDOL 1.我认为案件状态足以对此进行分类。它必须是我加入到DP_CrossReference。我怎样才能加入到这个表格中,以便我不会重复,但它包含了特定的组合覆盖,通用覆盖和没有覆盖的覆盖?

+0

如果您有SEDOL = 1和投资组合= 1,应该采用哪种覆盖?您拥有相同价值的投资组合和通用覆盖。这是重复的地方。 – EricZ 2013-04-11 17:09:27

+0

这只是一个示例数据,这不是我的实际数据的问题 – 2013-04-12 10:15:37

回答

0

如果我理解正确,请尝试此操作。

SELECT 
      ia.Portfolio 
     , ia.SEDOL 
     , COALESCE(ov1.Override,ov2.Override, ia.Sector) 
FROM positions as ia 
LEFT OUTER JOIN DP_CrossReference AS ov1 -- portfolio specific overrides 
      ON ov1.SEDOL = ia.SEDOL 
      AND ov1.Portfolio = ia.Portfolio 
LEFT OUTER JOIN DP_CrossReference AS ov2 -- universal overrides 
      ON ov2.SEDOL = ia.SEDOL 
      AND ov2.Portfolio IS NULL 
+0

感谢这一点,将连接从1拆分为2似乎已经成功了。 – 2013-04-12 10:16:29