首页 > 解决方案 > 在 Oracle SQL 中对行进行分组以实现唯一 ID

问题描述

我在 SQL 表中有以下行

Col1    Col2  Col3  Col4
CABA    B08    3    0000000000017
BA      A06    4    0000000000018
CABA    B08    3    0000000000018
CABA    B06  1.5    0000000000019
BA      A07    5    0000000000021
CABA    B04   0.5   0000000000021

结果,我想对常见的 Col4 进行分组并创建 ID ColD,如下所示

Col1    Col2  Col3  Col4            Col5
CABA    B08    3    0000000000017   ARB08
BA      A06    4    0000000000018   ARA06B08
CABA    B08    3    0000000000018   ARA06B08
CABA    B06  1.5    0000000000019   ARB06
BA      A07    5    0000000000021   ARA07B04
CABA    B04   0.5   0000000000021   ARA07B04

有没有办法我们可以使用 Oracle SQL 来实现这一点

标签: sqloraclegroup-by

解决方案


您可以listagg()用作窗口函数:

select
    t.*,
    'AR' || listagg(col2, '') 
        within group(order by col2) 
        over(partition by col4) col5
from mytable t

DB Fiddle 上的演示

COL1 | COL2 | COL3 | COL4 | COL5    
:--- | :--- | ---: | ---: | :--------
卡巴 | B08 | 3 | 17 | ARB08   
文学士 | A06 | 4 | 18 | ARA06B08
卡巴 | B08 | 3 | 18 | ARA06B08
卡巴 | B06 | 1.5 | 19 | ARB06   
文学士 | A07 | 5 | 21 | ARA07B04
卡巴 | B04 | .5 | 21 | ARA07B04

推荐阅读