Oracle 用行转置列
我有一个很长的查询,可以生成一些值。标识符名称太长。我更喜欢将结果集分为两列,分别称为“column name”和“column value” IE,用于我想要的以下查询:Oracle 用行转置列,oracle,oracle11g,unpivot,Oracle,Oracle11g,Unpivot,我有一个很长的查询,可以生成一些值。标识符名称太长。我更喜欢将结果集分为两列,分别称为“column name”和“column value” IE,用于我想要的以下查询: column name column value forn_old_codice_fornitura *** VOF_VOCE_FATTURABILE_COD *** IEF_ASSOGGETTAMENTO_COD *** ***是实际值 我该怎么办 SELECT forn.
column name column value
forn_old_codice_fornitura ***
VOF_VOCE_FATTURABILE_COD ***
IEF_ASSOGGETTAMENTO_COD ***
***是实际值
我该怎么办
SELECT
forn.forn_old_codice_fornitura,
'列说明1',
VOF.VOF_VOCE_FATTURABILE_COD,
'列说明2',
如果你是一个好朋友,
“列说明3”
[…]由于您使用的是Oracle 11g,因此可以使用该函数。这将获取列并将其转换为行:
select col_name , col_value
from
(
SELECT
forn.forn_old_codice_fornitura,
VOF.VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD,
ETA.ETA_CODICE_ASSOG,
CLU.CLU_CLASSE_FORNITURA_COD,
MVI.CLU_CLASSE_FORNITURA_COD,
ETA.ETA_USO_CLASSE_FORN,
MVI.MVI_FLG_SOGGETTO,
ETA.ETA_FLG_SOGGETTO,
[...]
)
unpivot
(
col_value
for col_name in (forn_old_codice_fornitura, VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD, ETA_CODICE_ASSOG, ...)
)
编辑,根据您想要生成列描述和列的长名称的注释,有两种方法可以做到这一点
首先,您可以使用一个CASE
表达式,将col\u name
替换为所需的列描述,类似如下:
select col_name,
col_value,
case col_name
when 'col1' then 'Test Col 1'
when 'col2' then 'Test Col 2'
when 'col3' then 'Test Col 3'
when 'col4' then 'Test Col 4'
end col_desc
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp;
或者,您可以创建一个表,其中包含从col\u name
到column description的转换,并将该表连接到unpivot结果:
select d.col_name,
d.col_value,
cd.col_desc
from
(
select col_name,
col_value
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp
) d
inner join cd
on d.col_name = cd.col_name
请参阅这两个函数的任意一个,因为您使用的是Oracle 11g,所以可以使用该函数。这将获取列并将其转换为行:
select col_name , col_value
from
(
SELECT
forn.forn_old_codice_fornitura,
VOF.VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD,
ETA.ETA_CODICE_ASSOG,
CLU.CLU_CLASSE_FORNITURA_COD,
MVI.CLU_CLASSE_FORNITURA_COD,
ETA.ETA_USO_CLASSE_FORN,
MVI.MVI_FLG_SOGGETTO,
ETA.ETA_FLG_SOGGETTO,
[...]
)
unpivot
(
col_value
for col_name in (forn_old_codice_fornitura, VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD, ETA_CODICE_ASSOG, ...)
)
编辑,根据您想要生成列描述和列的长名称的注释,有两种方法可以做到这一点
首先,您可以使用一个CASE
表达式,将col\u name
替换为所需的列描述,类似如下:
select col_name,
col_value,
case col_name
when 'col1' then 'Test Col 1'
when 'col2' then 'Test Col 2'
when 'col3' then 'Test Col 3'
when 'col4' then 'Test Col 4'
end col_desc
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp;
或者,您可以创建一个表,其中包含从col\u name
到column description的转换,并将该表连接到unpivot结果:
select d.col_name,
d.col_value,
cd.col_desc
from
(
select col_name,
col_value
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp
) d
inner join cd
on d.col_name = cd.col_name
请参见这两个属性的第二个属性,如果要添加包含长名称的第三列,请参见?例如,颜色名称、颜色值、颜色描述是吗possible@Gik25列描述从何而来?我将在原始查询中插入它。我将修改初始示例以显示you@Gik25请参阅我的编辑。有两种方法可以使用
大小写
创建列描述,或者使用列描述和可用于转换的名称创建表。如果要添加包含长名称的第三列?例如,颜色名称、颜色值、颜色描述是吗possible@Gik25列描述从何而来?我将在原始查询中插入它。我将修改初始示例以显示you@Gik25请参阅我的编辑。有两种方法可以使用大小写
来创建列描述,或使用列描述和可用于转换的名称创建表。