|
ID |
MON |
A |
B |
C |
D |
E |
F |
|
AA |
01 |
43 |
11 |
||||
|
AA |
02 |
22 |
32 |
||||
|
BB |
01 |
12 |
52 |
63 |
|||
|
BB |
02 |
23 |
65 |
32 |
|||
|
BB |
03 |
11 |
32 |
5 |
|
ID |
MON |
CODE |
VAL |
|
AA |
01 |
A |
43 |
|
AA |
01 |
B |
11 |
|
AA |
02 |
A |
22 |
|
AA |
02 |
B |
32 |
|
BB |
01 |
A |
12 |
|
BB |
01 |
B |
52 |
|
BB |
01 |
C |
63 |
|
BB |
02 |
A |
23 |
|
BB |
02 |
B |
65 |
|
BB |
02 |
C |
32 |
|
BB |
03 |
A |
11 |
|
BB |
03 |
B |
32 |
|
BB |
03 |
C |
5 |
WITH t(id, mon, a, b, c, d, e, f) AS
(
SELECT 'AA', '01', 43, 11, null, null, null, null FROM dual
UNION ALL SELECT 'AA', '02', 22, 32, null, null, null, null FROM dual
UNION ALL SELECT 'BB', '01', 12, 52, 63, null, null, null FROM dual
UNION ALL SELECT 'BB', '02', 23, 65, 32, null, null, null FROM dual
UNION ALL SELECT 'BB', '03', 11, 32, 5, null, null, null FROM dual
)
SELECT *
FROM (
SELECT id
, mon
, CHR(lv+64) code
, DECODE(lv, 1, a, 2, b, 3, c, 4, d, 5, e, 6, f) val
FROM t
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 6)
)
WHERE val IS NOT NULL
ORDER BY id, mon, code
;