2017-08-23 107 views
-1

这是我的草稿代码,它将根据放置位置,括号的位置以及为每个表分配名称而失败。我不确定如何在加入多个表时创建具有左连接的嵌套查询。左加入和多表的子查询

任何有关如何重写下面的代码的建议非常感谢。

在此先感谢您的帮助!

IF OBJECT_ID('tempdb..#1') IS NOT NULL DROP TABLE #1 ; 
IF OBJECT_ID('tempdb..#2') IS NOT NULL DROP TABLE #2 ; 
IF OBJECT_ID('tempdb..#3') IS NOT NULL DROP TABLE #3 ; 


SELECT * FROM nwh_analytics.dbo.km_cmr_table a 

left join (
select 
    b.prov_id + b.prov_site_num as prov, 
    count(distinct b.claim_num) total_claims_billed, 
    sum(b.paid) as total_dollars_paid 

into  
#1 -- drop table #1 

from  
datawarehouse.dbo.claims b 
where 
dos >= '2017-01-01' 
and fee_sched like 'tup%' 
and a.code = b.CPT_CODE 

group by  
    prov_id + prov_site_num) 

    on a.code = b.CPT_CODE 


Select * From nwh_analytics.dbo.km_cmr_table a 

left join(
select 
d.contract_id, 
d.contract_legal_name, 
b.prov_id + b.prov_site_num as prov, 
c.prov_full_name, 
count(distinct b.claim_num) as claims_with_new_codes, 
sum(b.paid) as paid_for_claims_with_new_codes, 
e.total_claims_billed, 
e.total_dollars_paid 

into  
#2 

from  
datawarehouse.dbo.claims b 
join datawarehouse.dbo.providers c 
on b.prov_id = c.prov_id 
join datawarehouse.dbo.providers_site d 
on b.prov_id + b.prov_site_num =c.prov_id + d.site_num 
join #1 e 
on b.prov_id + b.prov_site_num = e.prov 

where 
b.dos >= '2017-01-01' 
and b.fee_sched like 'tup%') 
a.code = b. FEE_CPT 



Select * From nwh_analytics.dbo.km_cmr_table a 

left join(select  
c.contract_id, 
c.contract_legal_name, 
a.prov_id + a.prov_site_num as prov, 
b.prov_full_name, 
a.claim_num, 
a.line_num, 
a.dos, 
a.cpt_code, 
cd.cpt_desc, 
a.proc_mod1, 
a.proc_mod2, 
a.billed, 
a.allowed, 
a.paid, 
a.deny_code, 
a.paid_date, 
a.Fee_Sched 

into  
#3 

from  
    datawarehouse.dbo.claims a 
    join datawarehouse.dbo.providers b 
    on a.prov_id = b.prov_id 
    join datawarehouse.dbo.providers_site c 
    on a.prov_id + a.prov_site_num = c.prov_id + c.site_num 
    join datawarehouse.dbo.cpt_codes cd 
    on a.cpt_code = cd.cpt_cd 

    where 
    a.dos >= '2017-01-01' 
    and a.fee_sched like 'tup%') 
    on a.Code = b. Fee_CPT 
+0

你想用'INTO#n'子句做什么?您不能将SELECT INTO作为子查询(或派生表)执行到外部SELECT。 –

+0

感谢您的回复。我正在创建临时表并将其删除。我不知道如何解决这个问题。 – Kimm

+0

你没有解释你想要做什么,你只是给出了一些无法解释的破坏代码,不能做你想做的事情。您甚至不清楚您所需过程的输入和输出是什么。请编辑清楚。请阅读并在[mcve]上采取行动。 – philipxy

回答

0

如果你只是想创建TEMP表,那么你只需要重新排列这样的查询。我将使用第一个作为一个例子,你可以使用同样的逻辑别人:

SELECT * 
into #1 -- drop table #1 
FROM nwh_analytics.dbo.km_cmr_table a 
left join (
select 
    CPT_CODE, 
    prov_id + prov_site_num as prov, 
    count(distinct claim_num) total_claims_billed, 
    sum(paid) as total_dollars_paid 
from  
datawarehouse.dbo.claims 
where 
dos >= '2017-01-01' 
and fee_sched like 'tup%' 
group by  
    CPT_CODE, prov_id + prov_site_num) b 
    on a.code = b.CPT_CODE 
+0

谢谢。有些东西不起作用,它可能是表名和左括号结束后的括号之内和之后的别名? – Kimm

+0

如果两个字段具有相同的名称,则无法选择临时表。这是可能的吗?顺便说一句,你永远不应该使用select *当你有一个连接,因为你正在返回重复的数据,并影响性能。另外你会看到你是否有两个同名的列。如果不是这样,那么你用这个代码得到的错误是什么? – HLGEM

+0

这是子查询的where子句中的a-b条件。我将它移动到JOIN条件。试试我目前的代码。 (实际上我删除它,因为它已经处于JOIN条件,所以它在WHERE子句中只是多余的。)等待还有一个问题。 –

0

我注意到,您正在使用从子查询表的别名b使用a.code = B连接。 CPT_CODE。你可以直接从子查询中取出cpt_code。

SELECT * 
    FROM nwh_analytics.dbo.km_cmr_table a 
    LEFT JOIN (SELECT cpt_code, 
        prov_id + b.prov_site_num AS prov, 
        COUNT(DISTINCT claim_num) total_claims_billed, 
        SUM(paid) AS total_dollars_paid 
       INTO #1 
       FROM datawarehouse.dbo.claims 
       WHERE dos >= '2017-01-01' 
       AND fee_sched like 'tup%' 
       GROUP BY cpt_code, 
         prov_id + prov_site_num) b 
    ON a.code = b.cpt_code  
+0

我不确定我关注? – Kimm

+0

忽略,是的这个作品谢谢你! – Kimm

+0

我想编辑你的#2和#3,但我不知道哪张表fee_cpt来自。 –