Sql server 在SQL Server中使用合并和联接获取数据
我有三张桌子。第一个表“状态映射”有以下列Sql server 在SQL Server中使用合并和联接获取数据,sql-server,join,Sql Server,Join,我有三张桌子。第一个表“状态映射”有以下列 Status_original Status_Site accepted Call Verified duplicate Duplicate Leads dq DQ “Lead_transaction”包含以下列: Lead_transaction_id Rate Status 11 0.01 accepted 12
Status_original 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 duplicate
“Lead_实例”表:
Lead_Instance_id Lead_transaction_id product_id affiliate_id
1 11 6 10
2 12 7 11
3 13 6 10
我想做的是循环遍历status_mapping表,获得每个状态的计数(lead_instance_id)和总和(rate),然后从product_id=6和affiliate_id=10的上一个表中获取站点状态。我的最终结果应该是这样的
Total Sum Status
1 0.01 Call Verified
1 0.01 Duplicate Leads
0 0.00 DQ
SQL尝试
SELECT S.status_site AS [Status]
,COALESCE(count(L.lead_instance_id), 0) AS [Total Occurrences]
,COALESCE(SUM(L.Rate), 0) AS [Rate Sum]
,COALESCE(li.product_id, 0) AS [Product_id]
,COALESCE(li.afid, 0) AS [AFFILIATE_id]
FROM Status_Mapping S
LEFT OUTER JOIN lead_transactions L ON S.status_orignal = L.STATUS
LEFT OUTER JOIN lead_instance li ON li.lead_instance_id = L.lead_instance_id
WHERE li.product_id = 6
AND li.afid = 27
GROUP BY S.status_site
,li.product_id
,li.afid
这里的重要部分是先进行内部连接,这样您就可以将结果限制在您想要的产品和附属公司,然后再使用外部连接来保留完整的状态列表。在这种情况下,您偶尔也会看到右连接而不是嵌套。您是否可以包括对SQL语句的尝试?选择S.status\u site作为[status],COALESCE(count(L.lead\u instance\u id),0)作为[Total executes],COALESCE(SUM(L.Rate),0)作为[Rate SUM],COALESCE(li.product\u id,0)作为[product\u id],合并(li.afid,0)为[AFFILIATE_id],其中li.product_id=6和li.afid=27由S.Status_站点、li.product_id、li.afid分组的状态映射S LEFT-OUTER-JOIN-lead_交易L在S.Status_orignal=L上合并为[Affid]。使用不起作用的编辑功能,它会为所有行返回相同的total和sum值,因为外部应用在s上不相关。虽然您可以让它工作,但没有理由不在此处使用常规外部联接。好的,忘记从_表链接到main。我累了。谢谢你。这真的很有帮助
select Total = isnull(RES.Total,0),
Summ = isnull(RES.Summ,0 ),
Status = S.Status_Site
from Status_Mapping S
outer apply (
select Total = count(*), Summ = sum(LT.Rate)
from Lead_Instance LI
join Lead_transaction LT
on LT.Lead_transaction_id = LI.Lead_transaction_id
where LT.Status = S.Status
and LI.product_id = 6
and LI.affiliate_id = 10 ) RES
select
count(lt.Lead_transaction_id) as Total,
coalesce(sum(lt.Rate), 0) as "Sum",
sm.Status_Site as "Status"
from
Status_Mapping sm
left outer join
(
select lt.Lead_transaction_id, lt.Status, lt.Rate
from
Lead_transaction lt inner join Lead_instance li
on li.Lead_transaction_id = lt.Lead_transaction_id
where
li.product_id = 6 and li.affiliate_id = 10
) lt
on lt.Status = sm.Status_original
group by sm.Status_Site