LenTompkins
asked on
sql join on same table with different criteria
I have a language table where there is always a primary language but not a secondary Language. The way I wrote the query, if there are two language records I am getting correct results,:
Select PLanguage.Language as PrimaryLang, SLanguage.Language as SecondLang
from PatientLanguage as PLanguage
left outer join PatientLanguage as SLanguage
on PLanguage.MRN = SLanguage.MRN
where Planguage.MRN = 1003
and PLanguage.LanguageOrder = 1
and isNull(Slanguage.LanguageO rder,2) = 2
this returns,
PrimaryLang SecondLang
English Spanish
but when I change to an MRN who only has a primary language, no record is returned. How do I correct this?
Select PLanguage.Language as PrimaryLang, SLanguage.Language as SecondLang
from PatientLanguage as PLanguage
left outer join PatientLanguage as SLanguage
on PLanguage.MRN = SLanguage.MRN
where Planguage.MRN = 1003
and PLanguage.LanguageOrder = 1
and isNull(Slanguage.LanguageO
this returns,
PrimaryLang SecondLang
English Spanish
but when I change to an MRN who only has a primary language, no record is returned. How do I correct this?
ASKER
No that didn't work either, I am not returning any row. When I tried this:
Select PLanguage.Language as PrimaryLang, ISNULL(SLanguage.Language, "None") as SecondLang
from PatientLanguage as PLanguage
left outer join PatientLanguage as SLanguage
on PLanguage.MRN = SLanguage.MRN
where Planguage.MRN = 3319
and PLanguage.LanguageOrder = 1
I am getting one row returned, but the data is incorrect
PrimaryLang SecondLang
English English
Select PLanguage.Language as PrimaryLang, ISNULL(SLanguage.Language,
from PatientLanguage as PLanguage
left outer join PatientLanguage as SLanguage
on PLanguage.MRN = SLanguage.MRN
where Planguage.MRN = 3319
and PLanguage.LanguageOrder = 1
I am getting one row returned, but the data is incorrect
PrimaryLang SecondLang
English English
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
IF that doesn't work - and my TSQL is rusty - try:
Select PLanguage.Language as PrimaryLang,
ISNULL((Select SLanguage.Language
FROM PatientLanguage as SLanguage
WHERE SLanguage.MRN = 3319
and SLanguage.LanguageOrder = 1), "None") AS SecondLang
FROM PatientLanguage as PLanguage
WHERE PLanguage.MRN = 3319
and PLanguage.LanguageOrder = 1
Select PLanguage.Language as PrimaryLang,
ISNULL((Select SLanguage.Language
FROM PatientLanguage as SLanguage
WHERE SLanguage.MRN = 3319
and SLanguage.LanguageOrder = 1), "None") AS SecondLang
FROM PatientLanguage as PLanguage
WHERE PLanguage.MRN = 3319
and PLanguage.LanguageOrder = 1
ASKER
Great that worked and I got it to work for the whole table by doing this:
Select Planguage.Language as PrimaryLang,
isNull((Select isNull(Slanguage.Language, 'None') as SecondLang from PatientLanguage as SLanguage
where SLanguage.LanguageOrder = 2 and PLanguage.MRN = SLanguage.MRN), 'None') as SecLang
from PatientLanguage as PLanguage
where PLanguage.LanguageOrder = 1
Select Planguage.Language as PrimaryLang,
isNull((Select isNull(Slanguage.Language,
where SLanguage.LanguageOrder = 2 and PLanguage.MRN = SLanguage.MRN), 'None') as SecLang
from PatientLanguage as PLanguage
where PLanguage.LanguageOrder = 1
Hey, great! I guess I'll have to brush up on my nested queries...
Select PLanguage.Language as PrimaryLang, ISNULL(SLanguage.Language,
from PatientLanguage as PLanguage
left outer join PatientLanguage as SLanguage
on PLanguage.MRN = SLanguage.MRN
where Planguage.MRN = 1003
and PLanguage.LanguageOrder = 1
and isNull(Slanguage.LanguageO