我写了一个存储过程:
SELECT
Encounter.EncounterNumber,
substring(Encounter.EncounterNumber,4,9) as Acct,
MedicalRecordNumber,
[AdmitDate - CCYYMMDD] as AdmitDate,
[DischargeDate - CCYYMMDD] as DischDate,
DischargeDisposition,
Encounter.Age,
EnctrAPR.APRDRG,
Age18, Age18To64, Age65
from
Encounter
full outer join EnctrAPR on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where
HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
我想使用EXCEPT
或INTERSECT
指令向我显示EnctrAPR
中不属于Encounter
的行。请注意,我在两个表上有不同的EncounterNumber
格式。
我将如何做到这一点?
答案 0 :(得分:1)
要获取只是那些Encounter中的记录而不是EnctrAPR中的记录,那么只需使用left outer join
而不是full outer join
,并添加一个不包括EnctrAPR空值的子句。 EncounterNumber。
即
SELECT
Encounter.EncounterNumber,
substring(Encounter.EncounterNumber,4,9) as Acct,
...
EnctrAPR.APRDRG,
Age18, Age18To64, Age65
from
Encounter
left outer join EnctrAPR on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where
EnctrAPR.EncounterNumber is null
and HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
请注意,EnctrAPR.APRDRG
的值始终为null,因为EnctrAPR没有匹配的行。
答案 1 :(得分:1)
你真的不需要交叉或除了你想要的东西,但你可以这样做。
SELECT Encounter.EncounterNumber, substring(Encounter.EncounterNumber,4,9) as Acct,
MedicalRecordNumber, [AdmitDate - CCYYMMDD] as AdmitDate, [DischargeDate - CCYYMMDD] as
DischDate, DischargeDisposition, Encounter.Age, EnctrAPR.APRDRG, Age18, Age18To64, Age65
from Encounter
full outer join EnctrAPR on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
INTERSECT -- OR EXCEPT
SELECT Encounter.EncounterNumber, substring(Encounter.EncounterNumber,4,9) as Acct,
MedicalRecordNumber, [AdmitDate - CCYYMMDD] as AdmitDate, [DischargeDate - CCYYMMDD] as
DischDate, DischargeDisposition, Encounter.Age, EnctrAPR.APRDRG, Age18, Age18To64, Age65
from EnctrAPR
join Encounter on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
你可以这样做,但我不推荐它。这是一种蛮力的方法。要仅获取EnctrAPR中的记录,您可以更改FROM EnctrAPR并使用内部联接来进行Encounter。
SELECT Encounter.EncounterNumber, substring(Encounter.EncounterNumber,4,9) as Acct,
MedicalRecordNumber, [AdmitDate - CCYYMMDD] as AdmitDate, [DischargeDate - CCYYMMDD] as
DischDate, DischargeDisposition, Encounter.Age, EnctrAPR.APRDRG, Age18, Age18To64, Age65
from EnctrAPR
join Encounter on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
要仅获取EnctrApr中不存在的记录,我将使用左连接:
SELECT Encounter.EncounterNumber, substring(Encounter.EncounterNumber,4,9) as Acct,
MedicalRecordNumber, [AdmitDate - CCYYMMDD] as AdmitDate, [DischargeDate - CCYYMMDD] as
DischDate, DischargeDisposition, Encounter.Age, EnctrAPR.APRDRG, Age18, Age18To64, Age65
from Encounter
left outer join EnctrAPR on
substring(Encounter.EncounterNumber,4,9) = EnctrAPR.EncounterNumber
where HSP# = 1
and InOutCode = 'I'
and ActualTotalCharge >0
and AdmitSubService <> 'SIG'
and [DischargeDate - CCYYMMDD] between @StartDate and @EndDate
and Encounter.Age >= 18
and EnctrAPR.EncounterNumber IS NULL