Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 用行转置列_Oracle_Oracle11g_Unpivot - Fatal编程技术网

Oracle 用行转置列

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”

IE,用于我想要的以下查询:

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请参阅我的编辑。有两种方法可以使用
大小写
来创建列描述,或使用列描述和可用于转换的名称创建表。