Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Unconventional SQL

Alex RDec 1 2025 — edited Dec 1 2025

This thread started just for fun. To share (and perhaps discuss?) some unusual ways of applying SQL features.

Using **model** instead of **pivot/unpivot**.

with cars(client, make, model, cnt) as
(
    select 1, 'BMW', 'X5', 1 from dual
    union all select 1, 'BMW', 'X7', 5 from dual
    union all select 2, 'BMW', 'X', 10 from dual
    union all select 2, 'BMW', 'Z4', 2 from dual
    union all select 1, 'Audi', 'Q5', 2 from dual
    union all select 1, 'Audi', 'Q8', 1 from dual
    union all select 1, 'Audi', 'TT', 3 from dual
    union all select 2, 'Audi', 'Q8', 4 from dual
)
select *
from (select client, make, cnt from cars)
pivot (sum(cnt) for make in ('BMW' as bmw, 'Audi' as audi));

    CLIENT        BMW       AUDI
---------- ---------- ----------
         1          6          6
         2         12          4

Same can be achieved with

select client, bmw, audi
from cars
model
return updated rows
partition by (client)
dimension by (make, rownum "_")
measures (0 bmw, 0 audi, cnt) 
rules
(
    bmw[0, 0] = sum(cnt)['BMW', any],
    audi[0, 0] = sum(cnt)['Audi', any]    
);

Similarly below

with cars_pvt(client, bmw, audi) as
(
    select 1, 6, 6 from dual
    union all select 2, 12, 4 from dual
)
select *
from cars_pvt
unpivot (cnt for type in (bmw as 'BMW', audi as 'Audi'));

    CLIENT TYPE        CNT
---------- ---- ----------
         1 BMW           6
         1 Audi          6
         2 BMW          12
         2 Audi          4

Can be rewritten to

select client, make, cnt
from cars_pvt
model
return updated rows
partition by (client)
dimension by ('dummy' make)
measures (bmw, audi, 0 cnt)
rules
(
    cnt['BMW'] = bmw['dummy'],
    cnt['Audi'] = audi['dummy']
);

Is there any practical reason to use model instead of pivot/unpivot?

I do not think so.

Comments
Post Details
Added on Dec 1 2025
6 comments
153 views