2013-12-12 108 views
-1

我是新來sql所以尋找一點幫助 - 第一部分了,但我有第二部分的問題。多個選擇或不同

我把三張桌子綁在一起。首先,我需要綁tblPatient.ID = tblPatientVisit.PatientID在一起,以消除其中的DUP工作

現在我需要把這些結果,並消除MRN的DUP,但我的查詢只返回一個結果是錯誤的 - LOL

查詢

select 
     tblPatient.id, 
     tblPatient.firstname, 
     tblPatient.lastname, 
     tblPatient.dob, 
     tblPatient.mrn, 
     tblPatientSmokingScreenOrder.SmokeStatus, 
     tblPatientVisit.VisitNo 
    from 
     tblPatient, 
     tblPatientSmokingScreenOrder, 
     tblPatientVisit 
    Where 
     tblPatient.ID = tblPatientVisit.PatientID 
     and tblPatientVisit.ID = tblPatientSmokingScreenOrder.VisitID 
     and tblPatient.ID in(
     Select Distinct 
      tblPatient.mrn 
     From 
      tblPatient 
     where 
      isdate(DOB) = 1 
      and Convert(date,DOB) <'12/10/2000' 
      and tblPatientVisit.PatientType = 'I') 

實際結果:

ID | firstName | LastName | DOB  | MRN  | SmokeStatus | VisitNO 
12 | Test Guy | Today  | 12/12/1023 | 0015396 | Never Smoker | 0013957431 

期望的結果:

90 | BOB  | BUILDER | 02/24/1974 | 0015476 | Former Smoker | 0015476001 
77 | DORA  | EXPLORER | 06/04/1929 | 0015463 | Never Smoker | 0015463001 
76 | MELODY  | VALENTINE | 09/17/1954 | 0015461 | Current  | 0015461001 
32 | STRAWBERRY | SHORTCAKE | 07/06/1945 | 0015415 | Current  | 0015415001 
32 | STRAWBERRY | SHORTCAKE | 07/06/1945 | 0015415 | Never Smoker | 0015415001 
32 | STRAWBERRY | SHORTCAKE | 07/06/1945 | 0015415 | Former Smoker | 0015415001 
12 | Test Guy | Today  | 12/12/1023 | 0015345 | Never Smoker | 0013957431 

任何人對我如何進入下一級並獲取具有唯一MRN的所有行都有任何建議。從上面的數據中我應該有5個在我的列表中。任何幫助,將不勝感激。

感謝

回答

0

如果我猜的話 - 這看起來很奇怪(但也許是OK)的唯一的事情是,你從你的母查詢的子查詢比較patient.IDpatient.mrn

除此之外 - 檢查下列事項:

(1) 你得到所有患者內查詢?

Select Distinct 
    tblPatient.mrn 
From 
    tblPatient 
where 
    isdate(DOB) = 1 
    and Convert(date,DOB) <'12/10/2000' 
    and tblPatientVisit.PatientType = 'I' 

(2) 什麼是您的病人類型的缺失記錄? (您的篩選條件爲tblPatientVisit.PatientType = 'I' - 缺失的記錄是否也有該患者類型?)

+0

對OP的問題應發佈爲評論,而不是答案。 – Tony

0

也許您需要在此處反轉邏輯。如在,

Select Distinct 
    patients.mrn1 
From (select 
     tblPatient.id as id1, 
     tblPatient.firstname as firstname1, 
     tblPatient.lastname as lastname1, 
     tblPatient.dob as DOB1, 
     tblPatient.mrn as mrn1, 
     tblPatientSmokingScreenOrder.SmokeStatus as SmokeStatus1, 
     tblPatientVisit.VisitNo as VisitNo1, 
     tblPatientVisit.PatientType as PatientType1, 
     from 
     tblPatient, 
     tblPatientSmokingScreenOrder, 
     tblPatientVisit 
     Where 
     tblPatient.ID = tblPatientVisit.PatientID 
     and tblPatientVisit.ID = tblPatientSmokingScreenOrder.VisitID 
    ) as patients 
where 
    isdate(patients.DOB1) = 1 
    and Convert(date,patients.DOB1) <'12/10/2000' 
    and patients.PatientType1 = 'I'); 
0

清理了一下,我認爲他們是對的。 MRN不會匹配患者ID,至少不會與您的示例數據匹配。你不應該需要一個內部查詢。這個查詢應該給你你想要的。

SELECT DISTINCT 
     p.id, 
     p.firstname, 
     p.lastname, 
     p.dob, 
     p.mrn, 
     s.SmokeStatus, 
     v.VisitNo 
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 v.PatientType = 'I' 
+0

謝謝 - 將運行它 - 我認爲這可能工作 – user3093389

+0

這是如此接近,但仍然有dups – user3093389