2013-09-25 23 views
0

考慮下表:轉換透視表,平表中的Oracle SQL

enter image description here

我使用下面的查詢(在SQL服務器)這個錶轉換成平表如下: enter image description here

我想用Oracle SQL做同樣的事情。但是,查詢在「Oracle SQL」語言中不起作用:cross apply(以下使用)不適用於Oracle。任何想法如何使用Oracle SQL等效寫入?謝謝!

select t.employee_id, 
    t.employee_name, 
    c.data, 
    c.old, 
    c.new 
from test_table t 
cross apply 
(
    select 'Address', Address_Old, Address_new union all 
    select 'Income', cast(income_old as varchar(15)), cast(income_new as varchar(15)) 
) c (data, old, new) 
+0

的可能重複[?什麼是SQL Server的等價適用於甲骨文(http://stackoverflow.com/問題/ 1476191 /什麼是相當於sql-server-apply-in-oracle) – Pablo

+1

我不認爲它是一個重複的問題 - 這是一個特定的情況,而原來的問題是非常通用的,答案根本不適用於此情況 –

+0

根本不重複。這裏我正在尋找在數據透視表的上下文中使用'apply'。 – Mayou

回答

1

沒有這麼簡潔而不做跨應用能力:

select t.employee_id, 
t.employee_name, 
c.data, 
DECODE (c.data, 'Address', t.address_old, 'Income', t.income_old) AS old, 
DECODE (c.data, 'Address', t.address_new, 'Income', t.income_new) AS new 
from test_table t 
cross join 
(
    select 'Address' AS data 
    from dual 
    union all 
    select 'Income' 
    from dual 
) c 
+0

感謝您的評論!這是否會導致上面顯示的平坦表格? – Mayou

+0

它實際上很棒!謝謝! – Mayou