Use UNPIVOT INCLUDE NULLS https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF55132:
SQL小提琴 http://sqlfiddle.com/#!4/682aa/2
Oracle 11g R2 架构设置:
CREATE TABLE test ( id, a, b, c, d ) AS
SELECT 1, 1, 2, 3, 4 FROM DUAL UNION ALL
SELECT 2, 1, NULL, 3, NULL FROM DUAL;
Query 1:
SELECT *
FROM test
UNPIVOT INCLUDE NULLS ( value FOR name IN ( a, b, c, d ) )
Results http://sqlfiddle.com/#!4/682aa/2/0:
| ID | NAME | VALUE |
|----|------|--------|
| 1 | A | 1 |
| 1 | B | 2 |
| 1 | C | 3 |
| 1 | D | 4 |
| 2 | A | 1 |
| 2 | B | (null) |
| 2 | C | 3 |
| 2 | D | (null) |