2017-03-03 29 views
0

我試圖創建一個查詢來給我一組特定的信息,但它似乎並不完全正確。我相信我在這裏錯過了一件關鍵的事情,但我無法想象它是什麼。這是我現在的查詢。查詢返回的行太多,似乎是重複的

select 
    per.Forenames 
    , per.Surname 
    , p.Identifier2 
    , ef.UlcerL 
    , ef.UlcerR 
    , ef.UlcerTypeL 
    , ef.UlcerTypeR 
    , pf.AmputationType 
from 
    Patient p 
    join Episode e on e.PatientID = p.PatientID 
    join Person per on per.PersonID = p.PersonID 
    join EpisodeFoot ef on ef.EpisodeID = e.EpisodeID 
    join PatientFootAmputation pf on pf.PatientID = p.PatientID 
where 
    ef.UlcerL = 1 or ef.UlcerR = 1 
    and DATEDIFF(year, e.EpisodeDate, getdate()) > 2010 

我得到的每個人可能有10行,完全相同的結果,我不知道爲什麼。 任何幫助將非常感激。

此外,它似乎好像pf.AmputationType不給我任何結果,我不認爲是真的。

編輯:這就是我現在看到的。該行正在被複制。

|Forenames|Surname|Identifier2|UlcerL|UlcerR|UlcerTypeL |UlcerTypeR|AmuptationType| 
|---------|-------|-----------|------|------|-----------|----------|--------------| 
| Joe |Bloggs | 12345678 | 1 | 0 |Neuropathic| NULL  | Medial  | 
| Joe |Bloggs | 12345678 | 1 | 0 |Neuropathic| NULL  | Medial  | 


ORDINAL_POSITION COLUMN_NAME    DATA_TYPE CHARACTER_MAXIMUM_LENGTH IS_NULLABLE 
1     PatientFootAmputationID uniqueidentifier NULL     NO 
2     PatientID    uniqueidentifier NULL     YES 
3     AmputationDate   datetime   NULL     YES 
4     AmputationWhichLeg  varchar    50     YES 
5     AmputationNumber   varchar    50     YES 
6     AmputationArea   varchar    300     YES 
7     AmputationType   varchar    300     YES 
8     AmputationDescription varchar    -1     YES 
9     AmputationSize   varchar    100     YES 
10     AmputationCondition  varchar    200     YES 
11     AmputationComments  varchar    -1     YES 
+0

我們展示表定義並預計結果的樣本數據 – Rumpelstinsk

+0

你能告訴我你的表定義是什麼意思?對不起,我在SQL方面並不擅長。 – Sp00kyy

+0

您創建的表格腳本 – Rahul

回答

0

如果您要加入的其他表具有多個帶有連接鍵的記錄,那麼您必定會得到相似的行。您可以考慮使用ROW_NUMBER()功能像

select * from (
select 
    per.Forenames 
    , per.Surname 
    , p.Identifier2 
    , ef.UlcerL 
    , ef.UlcerR 
    , ef.UlcerTypeL 
    , ef.UlcerTypeR 
    , pf.AmputationType 
    , row_number() over(PARTITION BY p.Identifier2) as rn 
from 
    Patient p 
    join Episode e on e.PatientID = p.PatientID 
    join Person per on per.PersonID = p.PersonID 
    join EpisodeFoot ef on ef.EpisodeID = e.EpisodeID 
    join PatientFootAmputation pf on pf.PatientID = p.PatientID 
where 
    1 in (ef.UlcerL , ef.UlcerR) 
    and DATEDIFF(year, e.EpisodeDate, getdate()) > 2010) xxx 
where rn = 1; 
+0

儘可能多的工作,我認爲OP必須首先調查重複的原因。沒有從答案的正確性中拿出任何東西 – Stephen