基于单列合并唯一行

时间:2013-01-09 13:43:39

标签: sql oracle plsql oracle10g

我只是想与甲骨文做一些艰巨的任务。

我有一个包含3列的表

    ColA   ColB   ColC  ColD
  ---------------------------
    123     N     null   1
    100     Y     AAAA   1
    123     Y     XXXX   2
    100     Y     YYYY   2

我需要更新 ColB ColC 以显示以下结果集。

    ColA   ColB  ColC       ColD
  -------------------------------
    123    Y     XXXX         1
    100    Y     AAAA\YYYY    1
    123    Y     XXXX         2
    100    Y     YYYY         2

如果任何唯一记录包含Y其他Y,我需要使用N更新 ColB

对于 ColC ,我想更新由\分隔的值,其中两行都包含值,否则只是值。

我试图用更新查询来做这个但是ghosh .........似乎不可能。

任何人都可以建议一个可能的解决方案吗?

如果需要,我被告知要使用PL / SQL。那会吗?

PS:我还看到了其他似乎相似的问题,但还没有得到任何解决方案。

编辑:我们只需更新 ColD 1的行。

1 个答案:

答案 0 :(得分:1)

查找colB和colC外观的查询:

select 
   colA, 
   case when count(case when colB='Y' then 1 end) > 0 
     then 'Y' 
     else 'N' 
   end as colB,
   LISTAGG(colC, '\') WITHIN GROUP (ORDER BY colA) AS colC
from your_table
group by colA;

从这里开始,你只需拍摄像

这样的MERGE
update your_table  a
using query b
on (a.colA=b.colB and colD=2)
when matched then update 
    a.colB=b.colB, 
    a.colC=b.colC