0

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

我遇到的问题是,我的数据库中的 Abandoned 值为 NULL 表示 NO 和 1 表示 YES。

所以当我加入

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

没有结果?

有什么想法吗?

基本上需要的是:

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

谢谢

4

2 回答 2

0

您可以使用 CASE WHEN 子句来解决这个问题(或 ISNULL,但 case when 在不同的数据库引擎中更便携)

 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)

从技术上讲,它不加入 - 它交叉加入空记录(只要只有一个空值对废弃的呼叫暗淡很重要,你就可以了)。

于 2013-03-29T11:22:19.817 回答
0

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

解码(值)= 加入列

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

于 2013-04-02T11:13:28.310 回答