2017-09-12 390 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