反行到列

bw_*_*ezi 2 sql inverse oracle10g

我有一个更大的SQL产生类似的输出作为这个简化的例子:

SELECT
  5 AS L0,
  2 AS L1,
  3 AS L2,
  4 AS L3
FROM DUAL
Run Code Online (Sandbox Code Playgroud)

当前输出是这一行:

| L0 | L1 | L2 | L3 |
|  5 |  2 |  3 |  4 |
Run Code Online (Sandbox Code Playgroud)


所需的输出是这列:

| kind | value |
|   0  |   5   |
|   1  |   2   |
|   2  |   3   |
|   3  |   4   |
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过工会选择4次.我正在寻找建议,如果工会是我能在这里做的最好的,如果这个输出可以通过其他方式实现.

我还发现了许多将列反转为行的示例,但在这里我正在寻找从行到列的反转.

SQL*_*son 11

请尝试UnPIVOT:

SELECT substr(kind,2,1) AS kind,"value" FROM 
(    
    SELECT
        5 AS l0,
        2 AS l1,
        3 AS l2,
        4 AS l3
    FROM dual
)temp unpivot include NULLS ("value" FOR kind IN (l0, l1 , l2, l3));
Run Code Online (Sandbox Code Playgroud)

相反地​​:

 SELECT *   
 FROM 
 (
      SELECT Kind,
             max(Value) Value
      FROM table 
      GROUP BY Kind
 ) PIVOT ( max(Value) FOR Kind IN (L0, L1, L2, L3) );
Run Code Online (Sandbox Code Playgroud)

假设您实际上有一个表来查询.