2016-11-01 7 views
0

Blick auf DN7-Anweisung. Ich schätze, ich vermisse etwas im Join-Bereich.Fallanweisung und Joins

Benötigen Sie Fall, um company.name aus Unternehmenstabelle anzuzeigen, wenn ca.code = 128 oder Wenn ca.code ist 106 carrier.name wird angezeigt.
sonst ph.name

wählen

--TRANSACATION INFO FOR HT 
'148' as 'DN1', --TRANSACTION SET ID 
isnull(convert(char(2), d9.code), space(2)) as 'D2', --MAINTENANCE TYPE CODE 
isnull(left(convert(char(8), c2.froimaintdate, 112), 8), space(8)) as 'DN3c', ---MAINTENANCE TYPE CODE DATE 

--STATE AGENCY 
left(c1.jurst, 2) as 'DN4', --Jurisdiction Code 
isnull(convert(char(25), c1.agencynumb), space(25)) as 'DN5', --Claim Number 

--INSURER/CARRIER/SELF-INSURER 
case 
    when ca.invmsg like 'CARRIER%' then isnull(left(uw.fedid, 9), space(9)) 
    else left(ph.fedid, 9) 
end 
as 'DN6', --Carrier/Self-Insurer FEIN 
case 
    when ca.invmsg like 'CARRIER%' and ca.code ='0128' then isnull(convert(char(30), (ca.name)), space(30)) 
    when ca.invmsg like 'CARRIER%' and ca.code ='0106' then isnull(convert(char(30), (uw.name)), space(30)) 
    else convert(char(30), (ph.name)) 
end 
as 'DN7', --Carrier/Self-Insurer Name** 

    from claim c 
join claim1 c1 on c.claimno = c1.lnkclaimno 
join claim2 c2 on c.claimno = c2.link2claim 
join claim3 c3 on c.claimno = c3.link3claim 
join person p on c.patient = p.personid 
join employer e on c.empcode = e.code 
join cmpolicy cm on c.claimno = cm.claimno 
join policy po on cm.policyid = po.policyid 
join carrier ca on c.carrier = ca.code 
join masttype m on c.casetype = m.mastid 
left join company uw on po.uwcompany = uw.code 
left join [address] a on c.occurlocat = a.addrid 
left join employer ph on e.polholder = ph.code 
left join mmi1 mm on c.claimno = mm.claimno 
left join dictdata d1 on ph.siccode = d1.datumid  --SIC Code 
left join dictdata d2 on c2.claimncci = d2.datumid  --NCCI Class (Occ) Code 
left join dictdata d3 on c1.injurnatur = d3.datumid  --Nature of Injury 
left join dictdata d4 on c.bodypartid = d4.datumid  --Body Part 
left join dictdata d5 on c1.injurcause = d5.datumid  --Cause of Injury 
left join dictdata d6 on c1.empstatus = d6.datumid  --Employment Status 
left join dictdata d7 on c2.losstype = d7.datumid  --Type Of Loss Code 
left join dictdata d8 on c2.mcotype = d8.datumid  --Managed Care Organization Code 
left join dictdata d9 on c2.froimaintcode = d9.datumid --Maintenance Type Code 
left join authent au on c1.adjuster = au.shortname  --Adjuster 
left join usermst u on au.authentid = u.personid  --Adjuster 
left join authent au2 on c.username = au2.shortname  --User (Preparer) 
left join usermst u2 on au2.authentid = u2.personid  --User (Preparer) 
left join provider pv on c3.treatprovider = pv.fedidseq --Initial Treatment Provider 
left join v_provaddr_master v on pv.fedidseq = v.fedidseq --Initial Treatment Provider Address 
left join cf_data cf1 on c.claimno = cf1.claimno and cf1.cf_id = '00024' --Notice Date 


--Date Function 
WHERE froimaintdate = '2016-10-26' 
     and c1.jurst = 'TX' 
+0

ist ca.code 0128 oder 128 ist es numerisch oder varchar? und warum benutzt du uw.name in beiden Zeilen, wenn du sagst, dass du den Firmennamen an einem Ort und den Namen des Carriers für 106 haben willst? zu viele Unbekannte hier. um eine Qualitätsantwort zu liefern. – xQbert

+0

0128 und 0106 char Wert. Ja, Firmenname, wenn 0128 und Name des Betreibers, wenn der Wert 106 ist. – Dizzle

+0

Also müssen Sie nur 'uw.name' in' 'name' in der Zeile' 0106' ändern? Wie es aussieht, scheint es, dass Sie den Firmennamen in beiden Zeilen anzeigen. Ich würde annehmen, dass carrierName aus der Carrier-Tabelle stammen würde. – xQbert

Antwort

0

mir Sieht aus wie Sie die falsche Tabelle alias auf der Trägerleitung für 106 dann haben ... Verwendung CA statt UW?

case 
    when ca.invmsg like 'CARRIER%' and ca.code ='0128' then isnull(convert(char(30), (uw.name)), space(30)) 
    when ca.invmsg like 'CARRIER%' and ca.code ='0106' then isnull(convert(char(30), (ca.name)), space(30)) 
    else convert(char(30), (ph.name)) 
end 
as 'DN7', --Carrier/Self-Insurer Name** 

Ich nehme auch dort mehrere Felder nach D7 ist sonst haben Sie eine , am Ende hängt.

--- Versuchen Sie, diese zu visualisieren zu helfen, wo das Problem ist ...

SELECT C.ClaimNo as C_ClaimNo, CM.ClaimNo as CM_ClaimNo, 
C.Carrier as C_Carrier, CA.Code as CA_Carrier, 
PO.PolicyID as PO_Policy_ID, CM.PolicyID as CM_PolicyID, 
UW.Code as UW_Company, PO.UWCompany as PO_UWCompany, 
CA.Name as CA_Name, Uw.Name as UW_Name, PH.Name as PH_Name 

from claim c 
join claim1 c1 on c.claimno = c1.lnkclaimno 
join claim2 c2 on c.claimno = c2.link2claim 
join claim3 c3 on c.claimno = c3.link3claim 
join person p on c.patient = p.personid 
join employer e on c.empcode = e.code 
join cmpolicy cm on c.claimno = cm.claimno 
join policy po on cm.policyid = po.policyid 
join carrier ca on c.carrier = ca.code 
join masttype m on c.casetype = m.mastid 
left join company uw on po.uwcompany = uw.code 
left join [address] a on c.occurlocat = a.addrid 
left join employer ph on e.polholder = ph.code 
WHERE C.ClaimNo = 'SomeVaule you're not getting resutls for' 

Entweder Sie eine NULL Datensatz erhalten, weil eine Verknüpfung ist wegen schlechten Daten scheitern. Oder Sie erhalten einen ungültigen Wert für einen der linken Joins aufgrund schlechter Daten. oder Sie erhalten einen Null-Wert für CA_Name, weil es tatsächlich leer ist ...

+0

Geändertes Beispiel zu ca.code, aber es zieht tatsächlich vom Arbeitgebertisch und ich bin unsicher warum. – Dizzle

+0

Basierend auf den Namen der Joins sehen sie gut aus. Es scheint mir, dass Sie ein Datenproblem haben. wahrscheinlich auf oder in der Nähe von der linken Seite der Gesellschaft beitreten. Entweder ist die po.uwcompany nicht das, was Sie für diese Firma erwarten, oder es gibt keinen Eintrag in der Tabelle company. Um dies herauszufinden, müssten wir ein Muster von Beispieldaten sehen, die dieses Problem zeigen. Wie es aussieht, ist der Code "Sieht gut aus"; aber nur basierend auf allgemeinen Namen müsste ich DDL für Tabellen und PK/FK-Beziehungen zwischen den Tabellen sehen. – xQbert

+0

Ich würde dies ausführen, die where-Klausel zu einer bestimmten Behauptung ändern, wo das Problem auftritt, damit wir sehen können, wo das Problem ist ... (hinzugefügt, um so lange wie ein Kommentar zu antworten) – xQbert