我有一个场景,我想用交叉引用表中的另一个值覆盖一个值。它们可以是通用覆盖或特定于组合的覆盖。我的交叉引用表如下所示:
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返回了通用覆盖。我认为案例statemt足以对此进行排序。它必须是我加入DP_CrossReference。我怎样才能加入这个表,这样我就不会重复,但它涵盖了特定的投资组合覆盖,通用覆盖和没有覆盖的帖子?
答案 0 :(得分: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