0

ストアドプロシージャを作成しました。

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ますEncounterEncounterNumber2つのテーブルの形式 が異なることに注意してください。

どうすればこれを達成できますか?

4

2 に答える 2

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
于 2012-10-05T14:53:39.160 に答える
1

Encounterにあり、EnctrAPRにはないレコードだけを取得するには、left outer joinの代わりにを使用full outer joinし、EnctrAPR.EncounterNumberのnull値を除外する句を追加します。

すなわち

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.APRDRGEnctrAPRには一致する行がないため、の値は常にnullになることに注意してください。

于 2012-10-05T14:49:34.407 に答える