2016-11-01 151 views
0

查看DN7声明。猜猜我在连接区域缺少一些东西。案例声明并加入

当ca.code = 128时,需要从公司表格显示company.name的情况 或 当ca.code为106时,显示carrier.name。
其他ph.name

选择

--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

是ca.code 0128或者128是数字还是varchar?为什么你在两行中使用uw.name,当你说你想在一个地方的公司名称和运营商名称为106?这里有太多的未知数。提供质量响应。 – xQbert

+0

0128和0106 char值。当0128和运营商名称是106时,是公司名称。 – Dizzle

+0

那么你只需要在显示'0106'的行上将'uw.name'更改为'ca.name'?因为它看起来你似乎在两条线上都显示公司名称。我会假设carrierName将来自载体表。 – xQbert

回答

0

看起来像你对我有106对运营商线路错了表的别名,然后...使用CA,而不是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** 

我还假设在D7之后还有更多的字段,否则最后会挂上,

---试试这个以帮助观察哪里有问题......

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' 

要么你会得到一个空记录,因为一个连接失败是由于错误的数据。 或者由于数据不正确,您将在左边的一个连接上再次获得空值。 或者你会在CA_Name上得到一个空值,因为它实际上是空的...

+0

将示例更改为ca.code,但它实际上是从雇主表中拉出来的,我不确定原因。 – Dizzle

+0

根据连接的名称,它们看起来很好。在我看来,你有一些数据问题。可能在左边或附近加入公司。因此,po.uwcompany不是您对该公司的期望,或者是comapny表中没有记录。为了解决这个问题,我们需要看到一个示例数据模型来展示这个问题。由于代码“看上去”很好,但只基于通用名称,我需要查看DDL表和表之间的PK/FK关系。 – xQbert

+0

我会运行这个更改where子句到发生问题的特定索赔,以便我们可以看到问题出在哪里......(作为评论添加回答的时间太长) – xQbert