I had a discrete set of values in local variables that I wanted to use within a merge, so I selected them from dual. Here is a literal representations
SELECT 'SCOTT' login_id ,'X' alpha, 'Y' beta ,10 catgy1 ,20 catgy2 ,30 catgy3 ,40 catgy4 ,50 catgy5 ,60 catgy6 FROM dual / LOGIN A B CATGY1 CATGY2 CATGY3 CATGY4 CATGY5 CATGY6 ----- - - ---------- ---------- ---------- ---------- ---------- ---------- SCOTT X Y 10 20 30 40 50 60 1 row selectedTrouble is, I needed the categories described as rows, not columns. So I wrapped the original query within an unpivot, commenting how the syntax represents the translation.
select login_id, alpha, beta, catgy, quota -- new columns
from ( -- existing query
select 'SCOTT' login_id
,'X' alpha, 'Y' beta
,10 catgy1
,20 catgy2
,30 catgy3
,40 catgy4
,50 catgy5
,60 catgy6
from dual
) -- end existing query
unpivot
(
quota -- new column: value
for catgy in -- new column translating previously separate columns to discrete data
( -- and the column -> data translation listed here
catgy1 as 'CATGY1'
,catgy2 as 'CATGY2'
,catgy3 as 'CATGY3'
,catgy4 as 'CATGY4'
,catgy5 as 'CATGY5'
,catgy6 as 'CATGY6'
)
)
/
LOGIN A B CATGY QUOTA
----- - - ------ ----------
SCOTT X Y CATGY1 10
SCOTT X Y CATGY2 20
SCOTT X Y CATGY3 30
SCOTT X Y CATGY4 40
SCOTT X Y CATGY5 50
SCOTT X Y CATGY6 60
6 rows selected
Relatively easy! Hope it helps one day.You can see the results from these statements at livesql.oracle.com
No comments:
Post a Comment