2013-04-11 141 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