2017-09-12 348 views
0

我正在寻找一种转换或旋转Oracle SQL中的表的方法。对于这种情况,SELECT中只有一行,但是有多列。Oracle SQL:转置/旋转具有一行和多列的表结果

例子:

SELECT 
    id AS "Id", 
    name AS "Name", 
    some_value AS "Favorite color" 
FROM 
    table 
WHERE 
    id = 5; 

结果:

id | name | some_value 
--- ------ ----------- 
5 John Orange 

我想看到的是:

Id    | 5 
Name   | John 
Favorite color | Orange 

我知道PIVOT的,但我在努力看到这种情况下的简单代码。

回答

1

可以unpivot的列如下,以得到这样的结果:

select fld, val 
from (
    select to_char(id) as "Id", -- convert all columns to same type 
      name as "Name", 
      some_value as "Favorite color" 
     from your_table 
    where id = 5 
    ) unpivot(val for fld in("Id", "Name", "Favorite color")); 
+0

好极了!这正是我所希望和期待的。十分感谢! –

0

使用简单UNION ALL条款

SELECT 'Id' As field_name, cast(id as varchar2(100)) as Value FROM "TABLE" where id = 5 
UNION ALL 
SELECT 'Name' , name FROM "TABLE" where id = 5 
UNION ALL 
SELECT 'Favorite color' , some_value FROM "TABLE" where id = 5; 
0

弗兰克Ockenfuss给了我一直在寻找的答案。谢谢,弗兰克!

然而,一个小的改动,使更改列名更容易一点:

SELECT * FROM (
    SELECT 
    TO_CHAR(id) AS id, 
    TO_CHAR(name) AS name, 
    TO_CHAR(some_value) AS fav_color 
    FROM my_table 
    WHERE id = 5 
) UNPIVOT(value FOR key IN(
    id AS 'Id', 
    name AS 'Name', 
    fav_color AS 'Favorite color' 
)); 

结果:

key   | value 
-------------- ------ 
Id    5 
Name   John 
Favorite color Orange