2016-02-12 58 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是正确的。 –