2013-12-17 4 views
0

Удивительно, если кто-нибудь узнает, как это сделать?Как вы исключаете из двух разных условий

В основном мне нужно возвращать результаты, когда Тип равен «Я», поэтому я удалил строку ---- И PatientType = «I» ----, которая работает как шарм, но затем я узнаю, что я имеют некоторые записи с тем же MRN, которые содержат оба типа «I» и «O». Если у них было «O», то я не могу считать их «я». Теперь это означает, что мне нужно удалить те, которые соответствуют этому состояние. Да, вы уже догадались я снова застрял. LOL

SELECT DISTINCT 
     p.id, 
     v.PatientID, 
     p.firstname, 
     p.lastname, 
     p.dob, 
     p.mrn, 
     s.SmokeStatus, 
     v.VisitNo, 
     s.VisitID, 
     v.ID, 
    v.AdmitedDate 

    FROM 
     tblPatient p 
     JOIN tblPatientVisit v ON p.id = v.PatientID 
     JOIN tblPatientSmokingScreenOrder s ON v.id = s.VisitID 
    WHERE 
     isdate(p.DOB) = 1 
     AND CONVERT(date,p.DOB) <'12/10/2000' 
     AND isdate(v.AdmitedDate) = 1 
     AND CONVERT(date,v.AdmitedDate) > '06/16/2013 00:00' 

    AND v.PatientType = 'I' 
    AND s.TobaccoType = 'Cigarettes' OR s.TobaccoType='Cigars' or s.TobaccoType='Pipes' 
    AND v.PatientType !='O' 
    AND v.PatientType !='2' 
    AND v.PatientType = 'I' 

    order by MRN 

ответ

2

добавить скобки, потому что у вас есть проблема оператора старшинства между OR и AND.

AND (s.TobaccoType = 'Cigarettes' OR s.TobaccoType='Cigars' or s.TobaccoType='Pipes') 

или лучше, IN пункт

AND s.TobaccoType IN ('Cigarettes', 'Cigars', 'Pipes') 

Затем добавьте пункт NOT EXISTS (если я хорошо понимаю), чтобы исключить пациентов с «орто в любом посещении»

AND NOT EXISTS (select null from 
       tblPatientVisit 
       where PatientId = p.id 
       and PatientType = 'O') 

поэтому весь запрос должен быть (не уверен, где v.PatientType != '2' должен идти)

SELECT DISTINCT 
     p.id, 
     v.PatientID, 
     p.firstname, 
     p.lastname, 
     p.dob, 
     p.mrn, 
     s.SmokeStatus, 
     v.VisitNo, 
     s.VisitID, 
     v.ID, 
     v.AdmitedDate 

    FROM 
     tblPatient p 
     JOIN tblPatientVisit v ON p.id = v.PatientID 
     JOIN tblPatientSmokingScreenOrder s ON v.id = s.VisitID 
    WHERE 
     isdate(p.DOB) = 1 
     AND CONVERT(date,p.DOB) <'12/10/2000' 
     AND isdate(v.AdmitedDate) = 1 
     AND CONVERT(date,v.AdmitedDate) > '06/16/2013 00:00' 
     AND v.PatientType = 'I' 
     AND v.PatientType !='2' 
     AND s.TobaccoType IN ('Cigarettes', 'Cigars', 'Pipes') 
     AND NOT EXISTS (select null from 
        tblPatientVisit 
        where PatientId = p.id 
        and PatientType = 'O') 
+0

@ user3093389 К сожалению, некоторые ошибки, теперь это должно быть в порядке. –

Смежные вопросы