繁体   English   中英

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

[英]Setting the ID in a fact table from a dimension table

在我的被​​遗弃呼叫的维度表中,我具有ID 1代码NO,ID 2代码YES。我想基于是否使用联接放弃了呼叫,将这些ID加载到事实表中。

我遇到的问题是数据库中的Abandoned值是否为NULL,否为1。

所以当我加入

 INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
         ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code

没有结果吗?

有什么想法吗?

基本上需要的是:

如果度量中的放弃值是null,我希望放弃维度中的放弃ID为2,如果不为null,则希望放弃ID为2

谢谢

您可以使用CASE WHEN子句解决此问题(或ISNULL,但这种情况在不同的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 

这会将空值替换为0。只要您没有0码,就可以了。 如果这样做,请尝试-1或其他您可能不知道的值。

如果您有一组未知的代码,则要做的另一件事是进行联接并添加:

 OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)

从技术上讲,这并不会联接-它会交叉联接null记录(并且只要在废弃的调用dim上只有一个null有意义,就可以了)。

是否可以在进行加入之前检查是否可以对ID使用解码功能。

解码(值)=连接列

或尝试使用COALESCE(REPLACE(COL,VAL_TO_B_REPLACE_IF_NOT_NULL),VALUE_TO_REPLCE_WHEN_NULL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM