显示从多列到单行的数据

时间:2012-11-08 05:49:10

标签: oracle concatenation pivot string-aggregation

我的oracle数据库中的

包含以下数据

http://i1207.photobucket.com/albums/bb476/daniwarrior/data-awal.jpg

我想显示如下所示的数据

http://i1207.photobucket.com/albums/bb476/daniwarrior/data-aKHIR.jpg

白名单列是合并whitelist_pembayaran列,whitelist_pemasan和whitelist_jenis_iklan

黑名单列正在合并 blacklist_pembayaran列,blacklist_pemasang和blacklist_jenis_iklan

oracle中的查询是否可以做到?如果您可以查询如何显示如上图所示的数据

* )抱歉我无法显示图片,因为我的声誉较少,无法显示图片,因此我提供了图片的链接

1 个答案:

答案 0 :(得分:0)

这是组和字符串连接中的字符串聚合。

在Oracle 11g中,您可以:

select 
   id_pegawai, 
   listagg(whitelist_pembayaran||whitelist_pemasan||whitelist_jenis_iklan,',') within group (order by id_pegawai)  as whitelist,
   listagg(blacklist_pembayaran||blacklist_pemasang||blacklist_jenis_iklan,',') within group (order by id_pegawai)  as blacklist
from table
group by id_pegawai;

(在Oracle< = 10g中,您可以使用wm_concat函数)

但你必须处理逗号。 下面是一个针对withelist的尝试(对于黑名单是相同的代码):

select 
   id_pegawai, 
   listagg(whitelist_pembayaran||decode(whitelist_pembayaran,null,null,',')||
           whitelist_pemasan||decode(whitelist_pemasan,null, null, ',')||
           whitelist_jenis_iklan,',') 
   within group (order by id_pegawai)  as whitelist
from table
group by id_pegawai;

作为解释:只有当字段不为空时,解码才会在字段后面添加逗号。在不需要whitelist_jenis_iklan之后,昏迷和listagg知道处理它的逗号。