【问题标题】:Picking Unique Combination of records between columns选择列之间记录的唯一组合
【发布时间】:2021-03-08 20:18:38
【问题描述】:

SOURCE_DATA

嗨,

我正在获取类似上面的源数据。基本上这两张表描述的是两个人之间的关系(实际)。

TABLE_1 列出了申请中的所有 INDV。 TABLE_2 记录了每个 indv 以及与申请中每个成员的关系。

我需要找到以 SEQ_NBR 开头的 ID 和 ID2 字段之间的唯一组合。从大到小。

数据仅用于一条记录。 SEQ_NBR 999 那里也可以有父亲,还有阿姨、外婆等……

【问题讨论】:

  • 结果会是什么?
  • @GordonLinoff 我用源数据更新了问题。

标签: sql oracle unique


【解决方案1】:

我只需要第一列和第二列的所有值的唯一组合。

如果您想要两列中的所有值组合,请使用cross join

select *
from (select distinct RCPT_NBR from t) x1 cross join
     (select distinct REL_RCPT_NBR from t) x2

【讨论】:

    【解决方案2】:

    您的数据高度非规范化

    简单地决定你将使用哪种关系并忽略另一个。

    示例 - 仅限于 母亲 关系显示所有三个相关人员(IDs 已简化)

    select * from tab
    where relationship = 'MOTHR';
    
      PERSON_1   PERSON_2 RELAT
    ---------- ---------- -----
           224        218 MOTHR
           224        217 MOTHR
    

    如果您想要从最年长到最年轻的输出排序使用分层查询(我在数据中添加了两个新人)

    WITH t1(person_1, person_2, lvl) AS (
      SELECT person_1,
             person_2,
             1 lvl
      FROM   tab 
      WHERE  person_1 In (select person_1 from tab where relationship = 'MOTHR'
                          minus 
                          select person_2 from tab where relationship = 'MOTHR')
             and relationship = 'MOTHR'             
      UNION ALL
      SELECT t2.person_1,
             t2.person_2,
             t1.lvl + 1 lvl
      FROM   tab t2, t1
      WHERE  t2.person_1 = t1.person_2 and relationship = 'MOTHR'
    )
    SEARCH DEPTH FIRST BY person_1 SET order1
    SELECT person_1,
           person_2,
           lvl
    FROM   t1
    order by order1;
    
      PERSON_1   PERSON_2        LVL
    ---------- ---------- ----------
           224        217          1
           224        218          1
           218        222          2
           222        223          3
    

    LVL 列显示世代,即祖母 (1)、母亲 (2) 和女儿 (3)。

    要获得最高级别的母亲,您可以在锚部分中使用MINUS 查询:

    (select person_1 from tab where relationship = 'MOTHR'
     minus 
    select person_2 from tab where relationship = 'MOTHR')
    

    这会选择所有不是女儿母亲,这是你需要的。

    【讨论】:

    • 问题是,我们的关系可以达到最高层次的母亲还是父亲。
    • @user3456025 补充说明
    • 谢谢。我已经重申了我的问题。可以再复查一下吗?
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多