在我放弃呼叫的维度表中,我有ID 1代码NO, ID 2代码YES我想根据是否使用连接放弃调用来将这些ID加载到事实表中。
无论如何问题,我有它在我的数据库中的废弃值是NULL为NO和1为YES。
所以当我加入
INNER JOIN datamartend.dbo.Abandoned_Call_Dim
ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code
没有结果?
对此有什么想法吗?
基本上需要的是:
如果度量中的放弃值为空,则放弃维度中的放弃ID为2,如果不为空,则放弃ID为2
谢谢
您可以使用CASE WHEN子句来解决这个问题(或者使用ISNULL,但是CASE WHEN在不同的DB引擎之间更易于移植)
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
将null替换为0。只要你没有0码,你应该没问题。如果是,请尝试-1或其他您知道不在可能的代码集中的值。
如果你有一个未知的代码集,另一件事是做连接和添加:
OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)
这不是技术上的连接-它交叉连接空记录(只要在放弃的调用dim中只有一个null重要,就可以了)。
您是否可以在Join之前检查您是否可以对ID使用Decode函数
Decode(value) = join column
或尝试使用COALESCE(REPLACE(COL, VAL_TO_B_REPLACE_IF_NOT_NULL), VALUE_TO_REPLCE_WHEN_NULL)