Групповые строки в Oracle SQL для получения уникального идентификатора - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть следующие строки в 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 и создать идентификаторы 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

1 Ответ

0 голосов
/ 17 февраля 2020

Вы можете использовать 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    
:--- | :--- | ---: | ---: | :-------
CABA | B08  |    3 |   17 | ARB08   
BA   | A06  |    4 |   18 | ARA06B08
CABA | B08  |    3 |   18 | ARA06B08
CABA | B06  |  1.5 |   19 | ARB06   
BA   | A07  |    5 |   21 | ARA07B04
CABA | B04  |   .5 |   21 | ARA07B04
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...