从维度表中设置事实表中的ID
在我的维度表中为放弃的呼叫我有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,如果不为空
感谢
弃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)
这在技术上不参加 - 它交叉连接空记录(只要只有一个空关键在被放弃的调用上很重要,你很好)。
感谢你,我运行最上面的代码,并说“转换失败时,将varchar值'未知'转换为数据类型int” 我不理解为两者都是varchar? –
看我的编辑。由于您是以varchar形式存储的,因此我在0周围添加了引号。如果维度将NO存储为0,但事实表列仅为空,则根据需要进行修改。 –
您是否可以在加入前检查是否可以使用解码函数ID。
解码(值)=加入柱
,或者尝试使用 COALESCE(REPLACE(COL,VAL_TO_B_REPLACE_IF_NOT_NULL),VALUE_TO_REPLCE_WHEN_NULL)
你说有两个表'incoming_measure'和'Abandoned_Call_Dim' NULL值?您是否可以显示更多查询,因为查询的其他部分可能会对此行为负责 – whytheq
如果未放弃调用,则不会在maincall表中显示null。在被遗弃的昏暗的ID不丢弃是3 在主表theres a 1如果它被遗弃,并在维度是2. 我无法找出如何匹配维度id maincall中的值? –
你能不能用'ISNULL(MAINCALLTABLE.Abandoned,3)'替换你的连接部分? – whytheq