Home > database >  Multiple records become a, field or by location
Multiple records become a, field or by location

Time:09-23



Such as this one date in the table corresponding to the four records, bitwise or, composed of a record in table 2, finally also can according to the new type of field, translate the original value of the corresponding type

Simple said is multiple records become a, to preserve the original information, how to implement? Or is there a better way? Under the ac

CodePudding user response:

Can't directly comma splice type field? Is feasible listagg (type, ', ') within group (order by 1) the from tt group by date

CodePudding user response:

Write is wrong, ignore the first floor,

CodePudding user response:

 

SQL>
SQL> Create table test (id, type)
2 as
3 select 1, 2 from dual union all
4 select 2, 8 from dual union all
5 the select 3, 16 from dual union all
6 select 4, 32 from dual;
The Table created
SQL> The create or replace function bitor (p varchar2)
2 return number is
3 prev number:=0;
4 the result number;
5 the begin
6 for x in (select regexp_substr (p, '[^,] +' 1, level) + 0 value
7 the from dual
8 connect by rownum & lt;=regexp_count (p, ', ') + 1
9)
10 loop
Result: 11=(prev + x.v alue) - bitand (prev, x.v alue);
12 prev:=the result;
13 end loop;
14 the return result;
15 the end;
16/
The Function created
SQL> The select bitor (listagg (type, ', ') within group (order by id)) from the test.
BITOR (LISTAGG (TYPE, ', ') WITHING
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
58
SQL> The drop function bitor;
The Function dropped
SQL> Drop table test purge;
Table dropped

SQL>

CodePudding user response:

If the date out a certain type of the bitand off is needed

CodePudding user response:

reference 4 floor wanling_nanjing response:
if the date of a certain type failure, also need bitand off

This logic, you add it,