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