2013-03-29 91 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)