2013-03-18 68 views
1

您好我有一个查询,我需要删除或格式化输出显示的代码。请看下面:PL/SQL Developer删除重复的条目,但保留相关的列数据

查询:

select rfc."NUMBER", 
ag.current_pending_groups 
from smspadm.cm3rm1 rfc, smspadm.tv_approval_vw appr, smspadm.approvala1 ag 
Order By rfc."NUMBER" 

当前的结果:

NUMBER CURRENT_PENDING_GROUPS 

C301609 Comm/AT&T Vert DCAB 
C302023 Collections DCAB 
C302023 Comm/AT&T Vert DCAB 
C302023 Fin-D2C-DNB DCAB 
C302023 Interactive Recording DCAB 
C302103 Collections DCAB 
C302103 Wintel Server DCAB 
C302103 Fin-D2C-DNB DCAB 
C301813 GTHRA Vert DCAB 
C301813 Tech Vert DCAB 

期望的结果: 或者:

NUMBER CURRENT_PENDING_GROUPS 

C301609 Comm/AT&T Vert DCAB 
C302023 Collections DCAB, Comm/AT&T Vert DCAB, Fin-D2C-DNB DCAB 
C302103 Collections DCAB, Wintel Server DCAB, Fin-D2C-DNB DCAB 
C301813 GTHRA Vert DCAB, Tech Vert DCAB 

或者它应该是这样的:

NUMBER CURRENT_PENDING_GROUPS 

C301609 Comm/AT&T Vert DCAB 
C302023 Collections DCAB 
     Comm/AT&T Vert DCAB 
     Fin-D2C-DNB DCAB 
     Interactive Recording DCAB 
C302103 Collections DCAB 
     Wintel Server DCAB 
     Fin-D2C-DNB DCAB 
C301813 GTHRA Vert DCAB 
     Tech Vert DCAB 

我应该用什么查询来获得这个结果?

+3

您可能会发现答案[这里](http://stackoverflow.com/questions/1441971/oracle-normalized-fields -to-csv-string),[here](http://stackoverflow.com/questions/4686543/sql-to-concatenate-column-values-from-multiple-rows),[here](http:// stackoverflow/sql-table-type-in​​-oracle),[here](http://stackoverflow.com/questions/10997854/ how-can-i-return-a-csv-string-from-pl-sql-table-type-in​​-oracle) stions/1120706/is-there-an-oracle-sql-query-that-aggregates-multiple-rows-into-one-row),[here](http://stackoverflow.com/questions/468990/how-can -i-combine-multiple-rows-into-a-com-delimited-list-in-oracle) – 2013-03-18 15:30:25

回答

0

第一变体

select 
    rfc."NUMBER", 
    wm_concat(ag.current_pending_groups) -- for 10g 
    -- listagg(ag.current_pending_groups,',') within group (order by ag.current_pending_groups) -- for 11g 
    as CURRENT_PENDING_GROUPS 
from smspadm.cm3rm1 rfc, smspadm.tv_approval_vw appr, smspadm.approvala1 ag 
group by rfc."NUMBER" 
Order By rfc."NUMBER" 

第二个变体

select 
    case when 
    row_number() over (partition by rfc."NUMBER" order by ag.current_pending_groups) = 1 
    then 
    rfc."NUMBER" 
    end as "NUMBER", 
    ag.current_pending_groups 
from smspadm.cm3rm1 rfc, smspadm.tv_approval_vw appr, smspadm.approvala1 ag 
Order By rfc."NUMBER", ag.current_pending_groups 
+3

这可行,但Oracle不支持(见MOS 1336219.1),所以不应该推荐 – 2013-03-18 15:25:55

+1

@ChrisSaxon - Don不要害怕WM_CONCAT :-)它工作得很好。 – 2013-03-18 15:31:55

+0

如果我忘记提及我们正在使用Oracle 10G和PL/SQL 8.0.1 – Sandy 2013-03-19 16:46:08

1
SELECT rfc."NUMBER", 
    LISTAGG(ag.current_pending_groups, ', ') 
    WITHIN GROUP (ORDER BY rfc."NUMBER") "CURRENT_PENDING_GROUPS" 
    FROM smspadm.cm3rm1 rfc, smspadm.tv_approval_vw appr, smspadm.approvala1 ag 
    GROUP BY rfc."NUMBER"; 


SELECT rfc."NUMBER", 
    wm_concat(ag.current_pending_groups) 
    FROM smspadm.cm3rm1 rfc, smspadm.tv_approval_vw appr, smspadm.approvala1 ag 
    GROUP BY rfc."NUMBER"; 
+0

上述解决方案对您无效吗?如果有的话,你会得到什么异常? – 2013-03-19 17:08:24

+0

不,它阻止我在“WITHIN GROUP”错误“ORA-00923:从关键字找不到预期的地方” – Sandy 2013-03-19 17:40:18

+0

我已更新新的答案朋友 – 2013-03-19 17:50:17

相关问题