2017-06-18 41 views
0

我是Oracle新手,正在尋找將Select中的1列轉換爲行的方法。Oracle SQL:如何將Select列轉換爲行

我的第一種方法是使用Listagg,它完全符合我的要求,但字符數限制對於我的情況來說還不夠。 作爲替代方案,我想要做以下事情。

SELECT 
    t.col1 
    , t.col2 
    , t.col3 
    , t.col4 
    , t.col5 
FROM 
    my table t 

代替t.col1 t.col2 t.col3 t.col4 t.col5標準輸出的予想t.col2出現在的行(即低於彼此)代替在列(彼此相鄰)。 Col2始終包含一個值,每個值都應顯示在單獨的行中。

在尋找解決方案時,我遇到了Unpivot和Decode,但不確定是否以及如何在此處應用此方法。

有人可以告訴我這可以實現嗎?

提前爲任何幫助非常感謝,
邁克

+1

您能提供樣本數據和期望的結果嗎? –

回答

1

一個簡單的方法 - 如果你的數據不是太大 - 只是使用union all。您的描述使得它聽起來像你想的:

select col1, col2, col5 
from t 
where col2 is not null 
union all 
select col1, col3, col5 
from t 
where col2 is not null 
union all 
select col1, col4, col5 
from t 
where col2 is not null; 

嗯,或者如果你只是想在col2不同值:

select distinct col2 
from t; 
+0

謝謝,戈登。我剛纔看到,我可以簡單地用兩個管道連接兩列,並在它們之間添加一個換行符,並選擇其餘的正常工作。但是,我會接受這個答案,因爲它也非常有用。再次感謝。 – keewee279

0

您正在尋找UNPIVOT功能

SELECT col 
FROM my table t 
UNPIVOT INCLUDE NULLS (col FOR source_column_name IN (col1, col2, col3, col4, col5) 

COL 
---- 
Value 1 
Value 2 
Value 3 
Value 4 
Value 5 

結果包含五行,每行COL一列,其中包含COL1至COL5列的值。 (未使用)列SOURCE_COLUMN_NAME包含數據來自的列的名稱。如果您只對COL不爲NULL的行感興趣,則可以刪除INCLUDING NULLS。

請參閱the ORACLE-BASE article on PIVOT and UNPIVOT operators瞭解更多詳情。