I had a classic report where I wanted to dynamically source the column headers from counts in the database (values in brackets).
The ability to do this has been a feature of APEX for a while, but this was the first time I did it in APEX 5.0.
![]() |
| Customise headers via Region attributes |
A basic query like this will return a grouped count.
select count(*), catgy
from some_categories
group by catgy
COUNT(*) CATGY_CODE
---------- ----------
5 CATGY1
5 CATGY3
1 CATGY5
7 CATGY2
1 CATGY4
1 CATGY6
6 rows selected
But the string needs to look like
Rep:Catgy1 (2):Catgy2 (4):...So I need to transpose those rows into a colon delimited string. Here's how you can do it with SQL analytics.
declare
lc_hdr varchar2(512);
begin
select 'Rep:'||listagg(initcap(catgy)||' ('||count(*)||')' -- just build a fancy string
,':') within group (order by catgy) -- concatenated by ':', listed in order of catgy
into lc_hdr
from some_categories
group by catgy;
return lc_hdr;
end anon;
An alternative may be bulk collecting the results into a PL/SQL array, then using apex_util.table_to_string(), but not when the problem can be solved with simple SQL ;p


No comments:
Post a Comment