【问题标题】:How can I join a table to itself to get the values needed?如何将表连接到自身以获得所需的值?
【发布时间】:2020-04-08 21:44:36
【问题描述】:

所以我有一张我想加入的桌子,但我并没有得到我需要的一切。所以我有一张看起来像这样的桌子。我想看看是否有办法将这个表连接到自身以获得其余部分,所以我看到当我看到代码“0013”时,我应该得到一个代码“0013”代码类型“9_prcdr”和med_code_ID 74717。我尝试将其加入到自身中,但我要么没有获得足够的行数,要么没有获得太多行数。我在网上看过,我看到有一个我可以尝试的功能是领先或滞后,但我没有太多经验。你能帮忙吗?谢谢!

patient_id claim_id  from_dt    prcdr_cd code   code_type  med_code_ID
123        961      2004-02-14  0013     0013   9_prcdr  74717  
456        214      2004-02-21  0013     NULL   NULL     NULL   
789        961      2004-01-16  0013     0013   9_prcdr  74717  
1001       212      2004-09-24  0013     NULL   NULL     NULL   
10002      291      2004-10-02  0013     NULL   NULL     NULL   

这就是它应该的样子。

patient_id claim_id  from_dt    prcdr_cd code   code_type  med_code_ID
123        961      2004-02-14  0013     0013   9_prcdr  74717  
456        214      2004-02-21  0013     0013   9_prcdr  74717  
789        961      2004-01-16  0013     0013   9_prcdr  74717  
1001       212      2004-09-24  0013     0013   9_prcdr  74717  
10002      291      2004-10-02  0013     0013   9_prcdr  74717  

我的尝试是这样的:

select * 
from t1
INNER JOIN t1 t2 ON t1.code =  t2.prcdr_cd
    AND t1.patient_id = t2.patient_id 
    AND t1.claim_id = t2.claim_id
    AND t1.from_dt = t2.from_dt

【问题讨论】:

  • 它仍然不清楚(对我来说)你想做什么?如果你 select * 来自一个自身连接的表,你将得到重复的每一列,一次来自 from,一次来自 join - 你没有显示这个。您填写缺失信息的标准也不清楚,您的加入尝试基于唯一的patient_id 加入,因此如果code 为空,则它将保持为空。因此,例如,您需要阐明 patient_id 456 应该如何获取缺失值,即根据什么逻辑从哪一行获取。
  • 同一代码有多个值时会发生什么?选择最大值,最小值,任何?

标签: sql sql-server tsql join


【解决方案1】:

我怀疑你可以使用窗口函数:

select
    patient_id,
    claim_id,
    from_dt,
    prcdr_cd,
    max(code)        over(partition by prcdr_cd) code,
    max(code_type)   over(partition by prcdr_cd) code_type,
    max(med_code_ID) over(partition by prcdr_cd) med_code_ID
from t1

这假设给定的prcdr_cd 对应于codecode_typemed_code_ID 值的唯一元组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2013-02-06
    相关资源
    最近更新 更多