0

我只是想用 Oracle 做一些艰巨的任务。

我有一个包含 3 列的表

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

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

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

如果任何唯一记录包含else ,我需要更新ColBYYN

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

我曾尝试使用更新查询来做到这一点,但天哪…………这似乎是不可能的。

任何人都可以提出一个可能的解决方案或什么?

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

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

编辑: 我们只需要更新ColD所在的那些行1

4

1 回答 1

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
于 2013-01-09T13:53:53.740 回答