2013-03-29 28 views
0

在我的维度表中为放弃的呼叫我有ID 1代码NO,ID 2代码YES 我想要根据是否将这些ID加载到事实表中该呼叫被放弃使用联接。从维度表中设置事实表中的ID

如何永远存在的问题,我的数据库中被遗弃的值是否为NULL,是否为1。

所以,当我加入

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

它拉没有结果?

有关于此的任何想法?

基本上所需要的是:

我想从废弃尺寸废弃的ID为2,如果在度量abandonded值为null,如果不为空

感谢

+0

你说有两个表'incoming_measure'和'Abandoned_Call_Dim' NULL值?您是否可以显示更多查询,因为查询的其他部分可能会对此行为负责 – whytheq

+0

如果未放弃调用,则不会在maincall表中显示null。在被遗弃的昏暗的ID不丢弃是3 在主表theres a 1如果它被遗弃,并在维度是2. 我无法找出如何匹配维度id maincall中的值? –

+0

你能不能用'ISNULL(MAINCALLTABLE.Abandoned,3)'替换你的连接部分? – whytheq

回答

0

弃ID 2您可以使用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 

这将[R用0代替null。只要你没有0代码,你应该没问题。如果你这样做,尝试-1,或者你知道的其他值不在可能的代码集中。

另一件事,如果你有一个未知的代码集,是做的加入,并加入到做:

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

这在技术上不参加 - 它交叉连接空记录(只要只有一个空关键在被放弃的调用上很重要,你很好)。

+0

感谢你,我运行最上面的代码,并说“转换失败时,将varchar值'未知'转换为数据类型int” 我不理解为两者都是varchar? –

+0

看我的编辑。由于您是以varchar形式存储的,因此我在0周围添加了引号。如果维度将NO存储为0,但事实表列仅为空,则根据需要进行修改。 –

0

您是否可以在加入前检查是否可以使用解码函数ID。

解码(值)=加入柱

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