【问题标题】:How to transpose a table from columns to rows in Oracle sql [duplicate]如何在Oracle sql中将表从列转换为行[重复]
【发布时间】:2013-06-08 05:50:32
【问题描述】:

我在 sql 中有一个表,它有许多列,每列具有相同类型的数据。我想将表的列转换为行,以便所有数据都出现在 1 列中。我正在谈论的表格类型的示例:

ID    DATE    TEST_1    TEST_2    TEST_3
----------------------------------------
1     1jan12    98        66       77
2     2jan12    75        89       72

进入:

ID    DATE        TEST       SCORE
-----------------------------------
1     1jan12      TEST_1      98
1     1jan12      TEST_2      66
1     1jan12      TEST_3      77
2     2jan12      TEST_1      75
2     2jan12      TEST_2      89
2     2jan12      TEST_3      72

提前感谢您的任何建议或指示!

【问题讨论】:

  • 如果您在 StackOverflow 中搜索“Oracle pivot”,有很多问题会根据需求讨论如何执行此操作。您使用的是什么版本的 Oracle? 11g 具有早期版本没有的PIVOT 运算符。你知道编译时有效的TEST 值的集合吗?或者您是否希望在基表中插入新的TEST_4 行时更改结果中的列数?
  • 我认为不是重复的(至少就大小写/解码而言),因为他想反过来(列 => 行而不是行 => 列)。跨度>
  • 我正在使用 11g。 TEST_N 的列数是静态的,不会改变。

标签: sql oracle transpose


【解决方案1】:

一种选择是使用“Union All”:

SELECT ID, DATE, 'TEST_1' AS TEST, TEST_1 AS SCORE
FROM TABLE
UNION ALL
SELECT ID, DATE, 'TEST_2' AS TEST, TEST_2 AS SCORE
FROM TABLE
UNION ALL
SELECT ID, DATE, 'TEST_3' AS TEST, TEST_3 AS SCORE
FROM TABLE

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 2022-11-16
    • 2021-08-07
    • 2014-01-27
    • 1970-01-01
    • 2015-04-17
    • 2019-10-14
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多