1

我有一张看起来像这样的桌子

col1 | col2
-----------
  1  |  a
  2  |  b
  3  |  c

我想运行一个使它看起来像这样的查询

val | colname
-------------
  1 | col1
  2 | col1
  3 | col1
  a | col2
  b | col2
  c | col2

我已经阅读了关于unpivot的内容,并且我已经弄清楚了如何获取列名。这是我目前正在使用的查询。

SELECT 
     * 
FROM 
    myTable 
UNPIVOT (
            val 
        FOR 
            column_name 
        IN (
               SELECT 
                   column_name 
               FROM 
                   USER_TAB_COLUMNS 
               WHERE 
                   table_name = 'myTable'
           )
        )
4

1 回答 1

2

除非我遗漏了什么,否则你为什么不能使用它。UNPIVOT要求所有数据都属于同一类型,因此您必须根据需要强制转换数据:

select value, colName
from
(
  select to_char(col1) col1,
    col2
  from yourtable
) 
unpivot
(
  value
  for colName in (col1, col2)
) 
order by value

请参阅带有演示的 SQL Fiddle

结果:

| VALUE | COLNAME |
-------------------
|     1 |    COL1 |
|     2 |    COL1 |
|     3 |    COL1 |
|     a |    COL2 |
|     b |    COL2 |
|     c |    COL2 |
于 2012-12-11T19:14:28.450 回答