Вам не нужен оператор PL/SQL
, но SQL Select
с коррелированными подзапросами, как показано ниже, лучше всего подходит для вашего случая, как показано ниже:
with tab( Col_A, Col_B, Col_C, Value, Col_E ) as
(
select 'Id_1','String_a','type1',null,'Flat' from dual union all
select 'Id_1','String_a','type2', 30,'Not Flat' from dual union all
select 'Id_1','String_b','type1',null,'Flat' from dual union all
select 'Id_1','String_b','type2', 30,'Not Flat' from dual union all
select 'Id_2','String_c','type1', 35,'Flat' from dual union all
select 'Id_2','String_c','type2', 55,'Flat' from dual
)
select Col_A,
( select distinct Col_E from tab where Col_A = t.Col_A and Col_C = 'type1' )
as type1_Col_E,
( select distinct value from tab where Col_A = t.Col_A and Col_C = 'type1' )
as type1,
( select sum(nvl2(value,1,0)) from tab where Col_A = t.Col_A and Col_C = 'type1' )
as type1_count,
( select distinct Col_E from tab where Col_A = t.Col_A and Col_C = 'type2' )
as type2_Col_E,
( select distinct value from tab where Col_A = t.Col_A and Col_C = 'type2' )
as type2,
( select sum(nvl2(value,1,0)) from tab where Col_A = t.Col_A and Col_C = 'type2' )
as type2_count
from tab t
group by t.Col_A;
COL_A TYPE1_COL_E TYPE1 TYPE1_COUNT TYPE2_COL_E TYPE2 TYPE2_COUNT
----- ----------- ------- ----------- ----------- ------ -----------
Id_1 Flat null 0 Not Flat 30 2
Id_2 Flat 35 1 Flat 35 1