3 Şubat 2009 Salı

String Aggregation Techniques

"Sütun olarak kaydedilmiş değerleri nasıl tek satır olarak yan yana ekleriz"in anlatıldığı güzel bir makale.

String Aggregation Techniques (oracle-base.com)

asktom.oracle.com


Bu da benim hazırladığım küçük bir örnek

Tablolar:

CREATE TABLE PERSONEL
(
ID NUMBER,
AD VARCHAR2(20),
MESLEK NUMBER
)
;

Insert into PERSONEL (ID, AD, MESLEK) Values (1, 'ramazan', NULL);
Insert into PERSONEL (ID, AD, MESLEK) Values (2, 'ahmet', NULL);
COMMIT;


CREATE TABLE GRUP
(
ID NUMBER,
AD VARCHAR2(20)
);

Insert into GRUP (ID, AD) Values (1, 'istanbul');
Insert into GRUP (ID, AD) Values (2, 'ankara');
Insert into GRUP (ID, AD) Values (3, 'trabzon');
COMMIT;


CREATE TABLE GRUPUYE
(
GK NUMBER,
PK NUMBER
);

Insert into GRUPUYE (GK, PK) Values (1, 1);
Insert into GRUPUYE (GK, PK) Values (2, 1);
Insert into GRUPUYE (GK, PK) Values (3, 1);
Insert into GRUPUYE (GK, PK) Values (1, 2);
COMMIT;


SQL>
1 SELECT pk,
2 LTRIM(MAX(SYS_CONNECT_BY_PATH(ad,','))
3 KEEP (DENSE_RANK LAST ORDER BY curr),',') AS gruplar
4 FROM (SELECT g.pk,
5 g.ad,
6 ROW_NUMBER() OVER (PARTITION BY g.pk ORDER BY ad) AS curr,
7 ROW_NUMBER() OVER (PARTITION BY g.pk ORDER BY ad) -1 AS prev
8 FROM (select pk, ad from grupuye, grup
9 where gk=id) g)
10 GROUP BY pk
11 CONNECT BY prev = PRIOR curr AND pk = PRIOR pk
12* START WITH curr = 1

PK GRUPLAR
---------- --------------------------------------------------
1 ankara,istanbul,trabzon
2 istanbul