2016-02-12 33 views
-1

我有3個表。第一個表 'Status_Mapping' 有以下列迭代1表獲取其他表的數據並獲得來自兩個表的合併結果

Status_orignal Status_Site 
accepted  Call Verified 
duplicate  Duplicate Leads 
dq    DQ 

現在其他表 'Lead_transaction' 有列

Lead_transaction_id Rate Status 
    11    0.01 accepted 
    12    0.02 accepted 
    13    0.01 dublicate 

再有就是與

Lead_Instance_id Lead_transaction_id product_id affiliate_id 
1     11     6   10 
2     12     7   11 
3     13     6   10 

一個 'Lead_Instance' 表我想要做的是通過status_mapping表循環,並獲得每個狀態的計數(lead_isntance_id)和總計(比率),然後從product_id = 6的上一個表中獲取站點狀態, iate_id = 10 我的最終結果應該是像

Total    Sum Status 
1     0.01 Call Verified 
1     0.01 Duplicate Leads 
0     0.00 dq 

任何幫助,將不勝感激

+2

這是一個基本的'join'和'組通過查詢。 –

+0

因爲我必須總結和計數,並且從表中獲得其他狀態,所以它不能與連接 – Krystal

+2

一起工作如果「不能與連接一起工作」,那麼這是代碼中的一個缺陷,因爲這是一種方法你在問什麼。如果您可以張貼更多的細節,我們可以在這裏幫助。可能最簡單的就是在sqlfiddle.com上創建一個小提琴 –

回答

2

首先,要明白,你沒有「循環」,而要加入類似的數據集:

SELECT S.Status_Site AS [Status], 
     ISNULL(SUM(CASE WHEN L.Status IS NOT NULL THEN 1 END), 0) AS [Total Occurrences], 
     ISNULL(SUM(L.Rate), 0) AS [Rate Sum] 
FROM Status_Mapping S 
LEFT OUTER JOIN Lead_Instance L 
    ON S.Status_Original = L.Status 
GROUP BY S.Status_Site 

編輯:

如果你想使用COALESCE:

SELECT S.Status_Site AS [Status], 
     COALESCE(SUM(CASE WHEN L.Status IS NOT NULL THEN 1 END), 0) AS [Total Occurrences], 
     COALESCE(SUM(L.Rate), 0) AS [Rate Sum] 
FROM Status_Mapping S 
LEFT OUTER JOIN Lead_Instance L 
    ON S.Status_Original = L.Status 
GROUP BY S.Status_Site 

既然你說你從來沒有聽說過聚結之前(它是所有參加列表中的第一個非空值):

https://msdn.microsoft.com/en-us/library/ms190349.aspx

+0

但是我如何確保總髮生率和費率總和顯示爲0,如果狀態不存在,所以我必須返回所有行status_mapping表 – Krystal

+1

使用'LEFT join'和'coalesce' null值爲0 – xQbert

+0

好的,您正在更改您的要求,並且應該將其包含在原始帖子中。我會更新我的答案,但@ xQbert是正確的。 –

相關問題