sql - 反转行到列

标签 sql oracle10g inverse

我有一个更大的 SQL,它产生与这个简化示例类似的输出:

SELECT
  5 AS L0,
  2 AS L1,
  3 AS L2,
  4 AS L3
FROM DUAL

当前输出是这一行:

| L0 | L1 | L2 | L3 |
|  5 |  2 |  3 |  4 |


所需的输出是此列:

| kind | value |
|   0  |   5   |
|   1  |   2   |
|   2  |   3   |
|   3  |   4   |

我知道我可以通过联合选择 4 次来得到这个。 我正在寻求建议,如果 union 是我在这里能做的最好的,以及是否可以通过其他方式实现此输出。

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

最佳答案

请尝试 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));

反之:

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

假设您实际上有一个要查询的表。

关于sql - 反转行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301613/

相关文章:

sql - 空值列和不存在 T-sql

我的函数 "inverse"的类型冲突,该函数旨在返回 long long 类型

python - 如何用 sympy 简化矩阵中的分数?

sql - 日期不能是将来的 SQL

sql - Oracle 获取最近 10 天的 sql

查找表上的 SQL 主键还是唯一约束?

sql - 如何从包含单引号的oracle数据库中搜索数据

oracle - 将单个列提取到数组中

database - 使用控制台应用程序时, 'OraOLEDB.Oracle' 提供程序未在本地计算机上注册?

c++ - 逆运动学 ACos 误差 QNAN、INAN