【问题标题】:Group rows in Oracle using PARTITION BY在 Oracle 中使用 PARTITION BY 对行进行分组
【发布时间】:2019-08-29 00:08:41
【问题描述】:

我有以下 2 个表格,我想像显示的结果一样显示它们

数据表1

id    col1      col2
t1    data1     data2
t2    data3     data4  

数据表2

idOfTable1   col3       col4
t1           data5      data6
t1           data7      data8
t1           data9      data10    
t2           data11     data12

预期结果 只想在第一行显示常见行的 id 值 在 id 列上连接 2 个表后的结果 DataTable 我如何在 Oracle 中实现

idofTable1      col1       col2       col3        col4
t1              data1      data2      data5       data6
                                      data7       data8
                                      data9       data10
t2              data3      data4      data11      data12

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以尝试以下查询 -

    SELECT CASE WHEN LAG(T1.ID) OVER(PARTITION BY T1.ID ORDER BY T2.COL3) = T1.ID 
                THEN NULL
           ELSE T1.ID END AS ID,
           CASE WHEN LAG(T1.ID) OVER(PARTITION BY T1.ID ORDER BY T2.COL3) = T1.ID
           THEN NULL
           ELSE T1.COL1 END AS COL1,
           CASE WHEN LAG(T1.ID) OVER(PARTITION BY T1.ID ORDER BY T2.COL3) = T1.ID
           THEN NULL
           ELSE T1.COL2 END AS COL2,
           T2.COL3,
           T2.COL4
    FROM T1
    JOIN T2 ON T1.id = T2.idOfTable1
    ORDER BY T1.ID, T2.COL3
    

    Here 是小提琴。

    【讨论】:

    • 这是不正确的,除非外部查询有一个order by。 SQL 表和结果集代表 无序 集。此外,不需要子查询。
    • @GordonLinoff,完全同意并编辑了答案。
    【解决方案2】:
    WITH a AS
     (SELECT t2.*,
             row_number() over(PARTITION BY idoftable1 ORDER BY col3) r2
        FROM t2),
    b AS
     (SELECT t1.*,
             row_number() over(PARTITION BY id ORDER BY id) r1
        FROM t1)
    SELECT id,
           col1,
           col2,
           col3,
           col4
      FROM b
     RIGHT JOIN a
        ON a.idoftable1 = b.id
       AND a.r2 = b.r1
     ORDER BY a.idoftable1,
              a.col3
    

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 2021-10-14
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2019-11-23
      • 1970-01-01
      相关资源
      最近更新 更多