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

时间:2013-03-29 11:18:30

标签: sql sql-server join data-warehouse fact-table

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

由于

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)