2017-08-23 4 views
-1

Hier ist mein Entwurf Code, der basierend auf Platzierung, Speicherort von Klammern und die Zuordnung eines Namens zu jeder der Tabellen fehlschlägt. Ich bin mir nicht sicher, wie eine verschachtelte Abfrage mit einem linken Join erstellt werden soll, wenn Sie mehreren Tabellen beitreten.Links Joining und Unterabfragen mit mehreren Tabellen

Alle Vorschläge zum Umschreiben des unten stehenden Codes werden sehr geschätzt.

Vielen Dank im Voraus für Ihre Hilfe!

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

Was versuchen Sie mit den 'INTO # n' Klauseln zu tun? Sie können ein SELECT INTO als eine Unterabfrage (oder abgeleitete Tabelle) zu einem äußeren SELECT nicht ausführen. –

+0

Danke für Ihre Antwort. Ich erstelle temporäre Tabellen und lasse sie fallen. Ich bin mir nicht sicher, wie ich das lösen soll. – Kimm

+0

Sie erklären nicht, was Sie tun möchten, Sie geben einfach unerklärlichen, kaputten Code, der nicht das tut, was Sie wollen. Es ist nicht einmal klar, was die Ein- und Ausgänge Ihres gewünschten Prozesses sind. Bitte bearbeiten, um klar zu sein. Bitte lesen und handeln Sie auf [mcve]. – philipxy

Antwort

0

Wenn Sie nur versuchen, TEMP-Tabellen zu erstellen, müssen Sie nur die Abfragen so neu anordnen. Ich werde die erste als Beispiel verwenden, und Sie können die gleiche Logik für die anderen gelten:

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

Danke. Etwas funktioniert nicht, könnte es der Alias ​​nach dem Tabellennamen und das Ende des linken Joins innerhalb und nach der Klammer sein? – Kimm

+0

Sie können keine temporäre Tabelle auswählen, wenn zwei Felder denselben Namen haben. Ist das möglich? Übrigens sollten Sie niemals select * verwenden, wenn Sie eine Verknüpfung haben, da Sie wiederholte Daten zurückgeben und sich auf die Leistung auswirken. Außerdem hätten Sie gesehen, wenn Sie zwei Spalten mit demselben Namen hätten. Wenn es das nicht ist, was ist der Fehler, den Sie mit diesem Code bekommen? – HLGEM

+0

Es war die a-b-Bedingung in der where-Klausel der Unterabfrage. Ich habe es in den JOIN-Zustand versetzt. Probieren Sie meinen aktuellen Code aus. (Eigentlich habe ich es entfernt, da es bereits in der JOIN-Bedingung war, also war es nur in der WHERE-Klausel redundant.) Warten Sie, es gibt noch ein Problem. –

0

Ich habe bemerkt, dass Sie die Tabelle alias b aus der Unterabfrage auf A.Code = b mit verbinden verwendet haben. CPT_CODE. Kannst du stattdessen den cpt_code aus der Unterabfrage ziehen?

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

Ich bin mir nicht sicher, ob ich folge? – Kimm

+0

Ignorieren, ja das funktioniert Danke! – Kimm

+0

Ich möchte Ihre # 2 und # 3 bearbeiten, aber ich weiß nicht, aus welcher Tabelle fee_cpt kommt. –