Menampilkan Beberapa Nilai Kolom Menjadi satu baris

Pertama-tama kita akan mencoba membuat table  dengan nama table TB_COLUMNTOROW terlebih dalulu sebelum mencoba conversi

CREATE TABLE TB_COLUMNTOROW ( ID INTEGER, NAMA VARCHAR2(200 BYTE) )

Jika table sudah di buat maka langkah selanjutnya kita akan mengisi data table tersebut terlebih dahulu

Menampilkan Beberapa Nilai Kolom Menjadi satu barisLangkah selanjutnya kita akan mencoba menggabungkan nama kedua row tersebut menjadi satu kolom, scriptnya seperti berikut ini :

1.Menggunakan Oracle 9i xmlagg

Di Oracle 9i dan seterusnya kita bisa menggunakan fungsi xmlagg untuk menggabungkan beberapa baris ke satu kolom:

SELECT ID,RTRIM (XMLAGG (XMLELEMENT (E, NAMA || ',')).EXTRACT ('//text()'), ',') NAMA FROM TB_COLUMNTOROW GROUP BY ID

Hasilnya akan terlebih seperti berikut ini :

Menampilkan Beberapa Nilai Kolom Menjadi satu baris

Jika idnya tidak di samakan maka kolom tersebut tidak ada bisa bergabung menjadi satu row, dikarenakan di sini kita menggunakan group by

2. Menggunakan 11g within group SQL

Di Oracle 11g, kita memiliki klausa SQL dalam kelompok dari beberapa baris menjadi satu baris satu baris. Hal ini juga memungkinkan beberapa nilai kolom tabel ditampilkan dalam satu kolom, dengan menggunakan fungsi built-in listagg:

SELECT ID, LISTAGG (NAMA, ',') WITHIN GROUP (ORDER BY NAMA) NAMA FROM TB_COLUMNTOROW GROUP BY ID

Hasilnya :

Menampilkan Beberapa Nilai Kolom Menjadi satu baris

 

3. Menggunakan fungsi PL/SQL

Anda dapat menulis fungsi PL / SQL untuk menampilkan beberapa baris nilai pada satu baris. Martin Chadderton telah menulis fungsi Pl / SQL yang disebut “stragg” yang dapat Anda definisikan untuk menampilkan beberapa baris SQL pada satu baris tunggal. Sciptnya sanggat simpel hanya satu baris jika anda tidak mau ribet silahkan gunakan query berikut ini :

SELECT STRAGG(NAMA) AS NAMA FROM TB_COLUMNTOROW;

 

Menampilkan Beberapa Nilai Kolom Menjadi satu baris

4. Menggunakan Fungsi rowtocol

Gunakan fungsi rowtocol untuk mengonversi baris ke kolom, jika ini menggunakan fungsi ini kita harus membuat functionnya terlebih dahulu seperti berikut :

CREATE OR REPLACE FUNCTION ROWTOCOL (P_SLCT    IN VARCHAR2,
                                     P_DLMTR   IN VARCHAR2 DEFAULT ',')
   RETURN VARCHAR2
   AUTHID CURRENT_USER
AS
   TYPE C_REFCUR IS REF CURSOR;

   LC_STR      VARCHAR2 (4000);
   LC_COLVAL   VARCHAR2 (4000);
   C_DUMMY     C_REFCUR;
   L           NUMBER;
BEGIN
   OPEN C_DUMMY FOR P_SLCT;

   LOOP
      FETCH C_DUMMY INTO LC_COLVAL;

      EXIT WHEN C_DUMMY%NOTFOUND;

      LC_STR := LC_STR || P_DLMTR || LC_COLVAL;
   END LOOP;

   CLOSE C_DUMMY;

   RETURN SUBSTR (LC_STR, 2);
/*
EXCEPTION
WHEN OTHERS THEN
lc_str := SQLERRM;
IF c_dummy%ISOPEN THEN
CLOSE c_dummy;
END IF;
RETURN lc_str;
*/
END;
/

cara memanggil fungsi tersebut seperti berikut ini :

SELECT DISTINCT ROWTOCOL('SELECT NAMA FROM TB_COLUMNTOROW')AS ALL_NAMA FROM DUAL

Menampilkan Beberapa Nilai Kolom Menjadi satu barisakan tetapi dengan rowtocol kelemahannya kita harus membuat fungsi rowtocal terlebih dahulu

Kesimpulannya Hasil menggunakan xmlagg, within group SQL,  Fungsi PL/SQL, dan Fungsi rowtocol hasilnya sama, jadi silahkan sesuai selera anda akan menggunakan fungsi yang mana.

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

2 Komentar