Oracle, Ümumi

Oracle bir neçə sətri birləşdirmək [listagg]

Listagg funskiyası ilə sətirləri birləşdirmək.

Oracle-da bəzən bir neçə sətri birləşdirərək bir sətirdə yazmaq tələb oluna bilər.

Bucür hallarda listagg funksiyasından istifadə edə bilərik.

İlk öncə testlərimizi edəcəyimiz cədvəli yaradaq və içərisinə data insert edək.

create table prod_chars (id number, prod_id number, char_name varchar2(300), char_value varchar2(300), sdate date );  
  
insert into prod_chars values (1,100,'param1', 'a', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (2,100,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (3,100,'param3', 'c', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (4,101,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (5,101,'param3', 'c', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (6,103,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (7,104,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (8,105,'param1', 'a', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (9,106,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (10,106,'param1', 'a', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (11,102,'param1', 'a', to_date('01/01/2018','mm/dd/yyyy'));  
  
insert into prod_chars values (12,102,'param2', 'b', to_date('01/01/2018','mm/dd/yyyy'));  

 

Cədvəlimizin görünüşü aşağıdakı kimi olacaq:

ID PROD_ID CHAR_NAME CHAR_VALUE SDATE
1 100 param1 a 01/01/2018 00:00:00
2 100 param2 b 01/01/2018 00:00:00
5 101 param3 c 01/01/2018 00:00:00
6 103 param2 b 01/01/2018 00:00:00
3 100 param3 c 01/01/2018 00:00:00
4 101 param2 b 01/02/2018 00:00:00
7 104 param2 b 01/01/2018 00:00:00
8 105 param1 a 01/01/2018 00:00:00
9 106 param2 b 01/01/2018 00:00:00
10 106 param1 a 01/01/2018 00:00:00
11 102 param1 a 01/01/2018 00:00:00
12 102 param2 b 01/01/2018 00:00:00

İndi isə listaggdan istifadə edərək sətirləri birləşdirək.

select listagg(char_name,', ') within group (order by char_name) 
as char_names from prod_chars;

Nəticə aşağıdakı kimi olacaq:

char_names
param1, param1, param1, param1, param2, param2, param2, param2, param2, param2, param3, param3

listagg-ı group by ilə birgə işlədərək hər bir prod_id üçün olan char_name-ləri ayrı-ayrı sətirlərdə göstərək.

select prod_id,listagg(char_name,',') within group (order by char_name) as char_names 
from prod_chars group by prod_id;
PROD_ID CHAR_NAMES
100 param1,param2,param3
101 param2,param3
102 param1,param2
103 param2
104 param2
105 param1
106 param1,param2
Həmçinin Oxu:  SQL Developer "Could not load connection type:" Xətası və həlli

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir