Vous n'avez pas vraiment besoin d'intersection ou à l'exception de ce que vous cherchez mais vous pourriez le faire de cette façon.
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
Vous pourriez l'accomplir de cette façon, mais je ne le recommanderais pas. C'est un peu une approche de force brute. Pour obtenir uniquement les enregistrements qui sont dans EnctrAPR, vous pouvez modifier votre FROM EnctrAPR et utiliser une jointure interne à 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
Pour obtenir uniquement les enregistrements qui n'existent pas dans EnctrApr j'utiliser une jointure gauche:
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
Si les chiffres sont différents formats alors comment voulez-vous les faire correspondre? Est-ce basé sur tous les autres domaines? – JNK
La valeur EncounterNumber dans Encounter est varchar (20) et EncounterNunber dans EnctrAPR est varchar (50). Les valeurs de la table Encounter sont pré-affectées avec 001, d'où la nécessité d'une sous-chaîne pour joindre les deux tables. Dois-je ajouter le 001 à EncounterNumber dans EnctrAPR pour EXCEPT ou INTERSECT pour travailler? – SidC
'EXCEPT' et' INTERSECT' regardent toutes les valeurs sur une ligne, donc oui. Sinon, les champs 'EncounterNumber' ne correspondront jamais correctement. – JNK