Oracle SQL:如何将 Select 的一列转换为行
Oracle SQL: How to convert one column of Select to rows
我是 Oracle 的新手,正在寻找一种将 Select 中的 1 列转换为行的方法。
我的第一种方法是使用 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,但不确定是否以及如何在此处应用。
谁能告诉我这是如何实现的?
非常感谢您的帮助,
麦克
一个简单的方法——如果你的数据不是太大——就是使用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;
您正在寻找 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 IS NOT NULL 的行感兴趣,则可以删除 INCLUDING NULLS。
有关详细信息,请参阅 the ORACLE-BASE article on PIVOT and UNPIVOT operators。
我是 Oracle 的新手,正在寻找一种将 Select 中的 1 列转换为行的方法。
我的第一种方法是使用 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,但不确定是否以及如何在此处应用。
谁能告诉我这是如何实现的?
非常感谢您的帮助,
麦克
一个简单的方法——如果你的数据不是太大——就是使用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;
您正在寻找 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 IS NOT NULL 的行感兴趣,则可以删除 INCLUDING NULLS。
有关详细信息,请参阅 the ORACLE-BASE article on PIVOT and UNPIVOT operators。