我有一个SQL Server存储过程,当我添加union和后半部分时,它不会给我所有结果。上半场将给我全部6个结果,使用联盟,我只得到5.
有3名患者有自己的[图表编号],每个患者都有2个应该显示的项目。如果[CPTCode]对于患者的两个条目都是相同的,那么当我添加联合时,只显示两个条目中的一个(它给了我所有6个具有相同[cptcode]而没有联合)。下半场实际上并没有用我正在做的事情来提取任何信息,但这是必要的。
select /*Patients with chart numbers*/
B1.[chart Number],
'0' as newPatient,
isnull(Lytec.[Last Name],'') as [Last Name],
isnull(Lytec.[First Name],'') as [First Name],
isnull(Address.[Name],
Lytec.[Facility Code]) as [Facility],
isnull(B1.DOS,'') as [DOS],
isnull(Ins.[Name],
Lytec.[Primary Code]) as [Primary Code],
isnull(B1.[CPTCode],'') as cptCode,
isnull(B1.[Units],'') as [Units],
isnull(B1.[Modifiers],'') as [Modifiers],
isnull(B1.[cptCodeOther],'') as [cptCodeOther],
isnull(B1.[cptCode2],'') as cptCode2,
isnull(B1.[Units],'') as [Units2],
isnull(B1.[Modifiers2],'') as [Modifiers2],
isnull(B1.[cptCodeOther2],'') as [cptCodeOther2],
'name' as ProviderName
from
[sandboxmr].dbo.patient Lytec
left join [dbo].[Billing] B1 on B1.[Chart Number] = Lytec.[Chart Number]
left join [sandboxmr].dbo.[Address] Address on Lytec.[Facility Code] = Address.[Code]
left join [sandboxmr].dbo.[Insurance] Ins on Lytec.[Primary Code] = Ins.[Code]
where
b1.[userid] = 54
and (b1.[DateSubmitted] >= convert(varchar(25),'2011-8-31',101)
and b1.[DateSubmitted] <= convert(varchar(25),'2011-9-22',101))
union
select /*Patients without chart numbers*/
cast(P.id as varchar(15)) as [chart number],
'1' as newPatient,
isnull(P.[Last Name],'') as [Last Name],
isnull(P.[First Name],'') as [First Name],
isnull(Address.[Name],
P.[Facility Code]) as [Facility],
isnull(IV.DOS,isnull(SV.DOS,'')) as [DOS],
isnull(Ins.[Name],P.[Primary_Code]) as [Primary Code],
isnull(IV.[cptCode],isnull(SV.[cptCode],'')) as cptCode,
isnull(IV.[Units],isnull(SV.[Units],'')) as [Units],
isnull(IV.[Modifiers],isnull(SV.[Modifiers],'')) as [Modifiers],
isnull(IV.[cptcodeother],isnull(SV.[cptcodeother],'')) as [cptCodeOther],
isnull(IV.[cptCode2],isnull(SV.[cptCode2],'')) as cptCode2,
isnull(IV.Units2,isnull(SV.Units2,'')) as [Units2],
isnull(IV.[Modifiers2],isnull(SV.[Modifiers2],'')) as [Modifiers2],
isnull(IV.[cptCodeOther2],isnull(SV.[cptCodeOther2],'')) as [cptCodeOther2],
'Name' as ProviderName
from
[DNSList].[dbo].[Patient] P
left join [dbo].[InitialVisits] IV on p.emr_id = IV.patientid
left join [dbo].[SubsequentVisits] SV on p.emr_id = SV.patientid
left join [sandboxmr].dbo.[Address] Address on P.[Facility Code] = Address.[Code]
left join [sandboxmr].dbo.[Insurance] Ins on P.[Primary_Code] = Ins.[Code]
where
p.[userid] = 54
and p.[Chart Number] is null
and (p.[DateSubmitted] >= convert(varchar(25),'2011-8-31',101)
and p.[DateSubmitted] <= convert(varchar(25),'2011-9-22',101))
order by
[Last Name]
为什么会这样做,我该如何解决?我尝试在[cptcode]区域添加distinct
,但它当然会生成错误。
感谢您提供的任何帮助!
答案 0 :(得分:58)
UNION
将消除重复的行,无论它们是在两个结果集之间,还是在一个结果集中。请尝试使用UNION ALL
。
答案 1 :(得分:25)
我相信您需要使用UNION ALL
。 UNION
默认禁止重复