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。我怎样才能加入这个表,这样我就不会得到重复,但它涵盖了特定的投资组合覆盖、通用覆盖和没有覆盖的位置?

4

1 回答 1

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
于 2013-04-11T17:16:20.587 回答