2009-04-22 66 views
0

我有兩組數據需要加入,但由於數據質量並不好,所以存在一個額外的問題。SSIS不匹配加入

這兩個數據集是呼叫(電話)和通信(關於電話呼叫創建的記錄)。它們分別具有名爲call_id和comm_id的ID。通信記錄還具有用於執行加入的call_id。問題在於數據收集系統無法正常工作,並且我有大量的通信無法與特定的通話匹配。並非所有的通話都會產生通信。

對於每一天我需要創建一個聯合列表來執行一些分析。 的問題是,由於缺少某些環節,我得到3種不同的行類型:

  • 只是調用,
  • 只是通訊科,
  • 鏈接通訊和呼叫。

我想要做的是每一行是給定日期的「Just Comm」行,我應該刪除同一日期的「Just Call」行。我不需要任何來自通話的值,我只需要知道通話發生了。如果我這樣做,我會得到正確的行數,因爲所有的「只是通信」將刪除一個「只是調用」行,就我所需要知道的是創建通信的調用。

我的問題是如何在SSIS中做到這一點。我已經到了擁有我的數據集的地步,其中包含我需要的所有數據,並且是我上面提到的3行類型的混合。您如何建議我通過刪除「Just Call」行的過程?

回答

0

我不知道我完全瞭解你的問題,但也許你可以用FULL OUTER JOIN嘗試:

SELECT 
    CL.ID AS CALL_ID, 
    CL.DATE AS CALL_DATE, 
    CM.ID AS COMM_ID, 
    CM.DATE AS COMM_DATE 
FROM 
    CALLS CL 
    FULL JOIN 
    COMMUNICATIONS CM ON 
    (CM.CALL_ID = CALL.ID) 
WHERE 
    (CL.ID IS NULL) OR 
    (CM.ID IS NULL) 

這將返回所有包含一個NULL呼叫ID或通信ID行(即具有「斷開鏈接」的那些)。

然後,您可以使用它作爲一個視圖(姑且稱之爲VCALLS_COMMS),並加入它自己找到一個匹配的日期行:

SELECT 
    VCC1.CALL_ID, 
    VCC2.CALL_ID 
FROM 
    VCALLS_COMMS VCC1 
    JOIN 
    VCALL_COMMS VCC2 ON 
    (VCC2.COMM_DATE = VCC1.CALL_DATE) 

也許這不是正是你要找的內容, 希望能幫助到你。

0

不確定SSIS,但我可以給你一些SQL開始。

似乎你並不是過分關注這些調用,因爲如果數據與通信不匹配,你願意忽略這些數據。

對我來說,這聽起來像一個典型的LEFT JOIN情況:

SELECT 
    call.call_id, 
    call.some_data, 
    comm.comm._id 
    comm.some_data, 
FROM 
    Communications comm 
    LEFT JOIN Calls call ON call.call_id = comm.call_id 
WHERE 
    <date filter: today> 

這會給你今天的所有通信,配對僅與正確鏈接這些調用。今天的所有其他調用都不會在結果集中結束。


編輯:

從OP的另一個答案評論:

我要採取一切的無與倫比的 電話和通訊記錄。從 通話記錄開始,然後從列表 開始,並將它們與同一天的任何通信記錄 相匹配。每個通訊記錄 只能使用一次。如果呼叫 記錄不能與 找到一個未使用的通訊匹配的日期,那麼它應該保持 空...

我看到一個關鍵問題這種方法:

其中的「呼」的記錄程序之後應該保留哪些?排名前17位(其中17位是今天的「通話/通話」錯誤數)?無論剩下什麼?最新的電話?

在結果集中留下17個隨機呼叫記錄可能有什麼價值?他們沒有任何可用的信息。它們並不比你劃掉的那些更好。你打算在什麼地方展示它們:爲什麼?

我會用左連接去,只是收集其餘的計數。

+0

這不會解決我的問題,因爲我需要知道每天在哪裏有多少個電話。這個解決方案會讓我失去所有無法比擬的通話。 – 2009-04-22 11:00:21

+0

然後,您需要準確定義您需要的數據和哪些數據。最好提供一個顯示情況和所需輸出的小例子。 – Tomalak 2009-04-22 12:42:12