在我的维度表中,对于已放弃的呼叫,我有ID 1代码NO,ID 2代码YES 我想根据是否使用连接放弃呼叫,将这些ID加载到事实表中。
我遇到的问题是,我的数据库中的Abandoned值对于NO为NULL而对于YES为1。
所以当我加入时
INNER JOIN datamartend.dbo.Abandoned_Call_Dim
ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code
没有结果?
有关于此的任何想法吗?
基本上需要的是:
如果测量中的放弃值为null,我希望废弃维度中的废弃ID为2,如果不为null,则放弃id 2
由于
答案 0 :(得分:0)
你可以使用CASE WHEN子句来解决这个问题(或ISNULL,但是在不同的数据库引擎中更容易移植的情况下)
INNER JOIN datamartend.dbo.Abandoned_Call_Dim
ON case when incoming_measure.Abandoned is null then '0'
else incoming_measure.Abandoned end
= case when Abandoned_Call_Dim.abandoned_code is null then '0'
else Abandoned_Call_Dim.abandoned_code end
这将用0替换空值。只要你没有0代码,你应该没问题。如果这样做,请尝试-1,或者您知道的其他一些值不在可能的代码集中。
如果您有一组未知的代码,另一件事就是进行连接并添加:
OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)
技术上不加入 - 它交叉加入空记录(只要在废弃的调用中只有一个空白,你很好)。
答案 1 :(得分:0)
在进行加入之前,您是否可以检查是否可以使用Decode函数作为ID。
解码(值)=加入列
或尝试使用 COALESCE(REPLACE(COL,VAL_TO_B_REPLACE_IF_NOT_NULL),VALUE_TO_REPLCE_WHEN_NULL)