Oracle SQL LISTAGG és wm_concat használata

Tábla lekérdezés csoportképzésből kivett adatelemek különböző értékeinek lista képzése használható függvények. Egyedinek gondolt mező (dadogásának) egymástól eltérő, egyedi értékeinek kimutatására, kezelésére, .. szolgáló hasznos függvényekről van szó.

Használatban a select parancs group by felsorolásból kihagyjuk a kérdéses  mezőt, de befoglaljuk jelzett függvénybe amely elvégzi a csodát és az eredmény mezőbe összefűzi (vessző határolóval) az egyedi értékeket.

Ora9-10 =>  wm_concat

Ora11 => LISTAGG


———-

SELECT LEVEL AS ID
 , DECODE(LEVEL,1,'Brigitta',2,'László',3,'László',4,'Krisztina',5,'Lajos',6,'Péter',7,'Béla',8,'Péter',9,'Gábor',10,'Jenő',11,'Norbert') AS Nev
 , DECODE(LEVEL,1,'Nő',2,'Férfi',3,'Férfi',4,'Nő',5,'Férfi',6,'Férfi',7,'Férfi',8,'Férfi',9,'Férfi',10,'Férfi',11,'Férfi') AS Nem
 FROM DUAL CONNECT BY LEVEL<=11
=>
ID NEV NEM
1 Brigitta Nő
2 László Férfi
3 László Férfi
4 Krisztina Nő
5 Lajos Férfi
6 Péter Férfi
7 Béla Férfi
8 Péter Férfi
9 Gábor Férfi
10 Jenő Férfi
11 Norbert Férfi

SELECT Nem
, LISTAGG(Nev,',') WITHIN GROUP (ORDER BY Nev) /*OVER(PARTITION BY Nem)*/ AS Elso_Nevek
, REGEXP_REPLACE(LISTAGG(Nev,',') WITHIN GROUP (ORDER BY Nev) /*OVER(PARTITION BY Nem)*/,'([^,]*)(,\1)+($|,)','\1\3') AS Egyedi_nevek
FROM 
( SELECT LEVEL AS ID
 , DECODE(LEVEL,1,'Brigitta',2,'László',3,'László',4,'Krisztina',5,'Lajos',6,'Péter',7,'Béla',8,'Péter',9,'Gábor',10,'Jenő',11,'Norbert') AS Nev
 , DECODE(LEVEL,1,'Nő',2,'Férfi',3,'Férfi',4,'Nő',5,'Férfi',6,'Férfi',7,'Férfi',8,'Férfi',9,'Férfi',10,'Férfi',11,'Férfi') AS Nem
 FROM DUAL CONNECT BY LEVEL<=11
)
GROUP BY Nem
;
=>
NEM ELSO_NEVEK EGYEDI_NEVEK
Férfi Béla,Gábor,Jenő,Lajos,László,László,Norbert,Péter,Péter Béla,Gábor,Jenő,Lajos,László,Norbert,Péter
Nő Brigitta,Krisztina Brigitta,Krisztina

SELECT Nem
, wm_concat(nev) as Elso_Nevek
FROM 
( SELECT LEVEL AS ID
 , DECODE(LEVEL,1,'Brigitta',2,'László',3,'László',4,'Krisztina',5,'Lajos',6,'Péter',7,'Béla',8,'Péter',9,'Gábor',10,'Jenő',11,'Norbert') AS Nev
 , DECODE(LEVEL,1,'Nő',2,'Férfi',3,'Férfi',4,'Nő',5,'Férfi',6,'Férfi',7,'Férfi',8,'Férfi',9,'Férfi',10,'Férfi',11,'Férfi') AS Nem
 FROM DUAL CONNECT BY LEVEL<=11
)
GROUP BY Nem
;
=>
NEM ELSO_NEVEK
Férfi László,Norbert,Jenő,Gábor,Péter,Béla,Péter,Lajos,László
Nő Brigitta,Krisztina


———-

SELECT 'A' as vezer , 1 as szamok from dual UNION
SELECT 'A' , 3 from dual UNION
SELECT 'B' , 1 from dual UNION
SELECT 'B' , 2 from dual UNION
SELECT 'C' , 1 from dual
=>
VEZER SZAMOK
A 1
A 3
B 1
B 2
C 1

WITH temp as (
SELECT 'A' as vezer , 1 as szamok from dual UNION
SELECT 'A' , 3 from dual UNION
SELECT 'B' , 1 from dual UNION
SELECT 'B' , 2 from dual UNION
SELECT 'C' , 1 from dual)
SELECT 
 vezer,
 wm_concat(szamok) as szamok
FROM
 temp
group by vezer
=>
VEZER SZAMOK
A 1,3
B 1,2
C 1
---

 

 

 

A bejegyzés kategóriája: Informatika, Oktatás
Kiemelt szavak: , .
Közvetlen link.