查询返回太多行,似乎是重复的

时间:2017-03-03 09:40:54

标签: sql sql-server sql-server-2008

我正在尝试创建一个查询来为我提供一组特定的信息,但它似乎并不合适。我相信我在这里错过了一个关键的东西,但我无法想到它是什么。这是我现在的查询。

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

1 个答案:

答案 0 :(得分: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;