Как слить несколько записей в одну

alx71
Дата: 22.02.2022 12:57:35
select 1 F1,null F2,null F3,null F4 from dual
union all
select null F1,1 F2,null F3,null F4 from dual
union all
select null F1,null F2,1 F3,null F4 from dual
union all
select null F1,null F2,null F3,1 F4 from dual
union all
select null F1,null F2,null F3,1 F4 from dual

        F1         F2         F3         F4
---------- ---------- ---------- ----------
         1
                    1
                               1
                                          1
                                          1


Хочется объединить в одну несколько записей, у которых значение столбца not null только в одной записи. Т.е. должно быть:

F1   F2   F3  F4
1     1    1    1
null null null 1
Vadim Lejnin
Дата: 22.02.2022 13:03:32
alx71
select 1 F1,null F2,null F3,null F4 from dual
union all
select null F1,1 F2,null F3,null F4 from dual
union all
select null F1,null F2,1 F3,null F4 from dual
union all
select null F1,null F2,null F3,1 F4 from dual
union all
select null F1,null F2,null F3,1 F4 from dual

        F1         F2         F3         F4
---------- ---------- ---------- ----------
         1
                    1
                               1
                                          1
                                          1


Хочется объединить в одну несколько записей, у которых значение столбца not null только в одной записи. Т.е. должно быть:

F1   F2   F3  F4
1     1    1    1
null null null 1


А чем отличается 4 и 5 запись?
alx71
Дата: 22.02.2022 13:10:02
Ничем.
Stax
Дата: 22.02.2022 14:21:41
alx71,

SQL> set null "-"
SQL> /

        ID A B  C
---------- - -- --
         1 a -  -
         1 b -  -
         1 c -  -
         1 - d  -
         1 - e  z
         1 - -  f
         1 - -  g
         1 - -  h
         1 - -  i
         2 a -  -
         2 b -  -
         2 - c  -
         2 - d  -
         2 - -  e

14 rows selected.
SQL> ed
Wrote file afiedt.buf

  1  with s1 as(
  2  select 1 id,       'a' a,  cast(null as varchar2(2)) b,     cast(null as varchar2(2)) c from dual union all
  3  select 1,  'b',    null,   null from dual union all
  4  select 1,  'c',    null,   null from dual union all
  5  select 1,  null,   'd',    null from dual union all
  6  select 1,  null,   'e',    'z' from dual union all
  7  select 1,  null,   null,   'f' from dual union all
  8  select 1,  null,   null,   'g' from dual union all
  9  select 1,  null,   null,   'h' from dual union all
 10  select 1,  null,   null,   'i' from dual union all
 11  select 2,  'a',    null,   null from dual union all
 12  select 2,  'b',    null,   null from dual union all
 13  select 2,  null,   'c',    null from dual union all
 14  select 2,  null,   'd',    null from dual union all
 15  select 2,  null,   null,   'e'  from dual),
 16  s2 as (
 17  SELECT
 18     tt.*
 19    ,row_number() over (partition by id,f order by t) rn FROM s1
 20  UNPIVOT (t FOR f IN (a AS 'a',b AS 'b',c AS 'c')) tt
 21  )
 22  select * from s2
 23  pivot (max(t) for f in ('a' a,'b' b,'c' c))
 24* order by 1,2
 25  /

        ID         RN A  B  C
---------- ---------- -- -- --
         1          1 a  d  f
         1          2 b  e  g
         1          3 c  -  h
         1          4 -  -  i
         1          5 -  -  z
         2          1 a  c  e
         2          2 b  d  -

7 rows selected.

SQL>


.....
stax