将列名称连接到列值

时间:2012-12-11 19:08:04

标签: oracle

我有一张看起来像这样的表

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

我希望运行一个看起来像这样的查询

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

我读过关于unpivot的文章,我已经找到了how to get the column names。这是我目前正在处理的查询。

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

1 个答案:

答案 0 :(得分: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 with Demo

结果:

| VALUE | COLNAME |
-------------------
|     1 |    COL1 |
|     2 |    COL1 |
|     3 |    COL1 |
|     a |    COL2 |
|     b |    COL2 |
|     c |    COL2 |