从维度表设置事实表中的ID



在我放弃呼叫的维度表中,我有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)

最新更新