2

在输入表中,键和值是列名。下面是输入表,我想要下面这个 o/p 格式的表,但数据没有出现......当我们可以%在方括号中进行符号而不在查询中使用数据透视表时,数据正在显示。但我正在使用在枢轴它显示空白。提前帮助我如何%在数据透视查询中使用符号和类似运算符。

输入表:

key      value 
-------------------
sal[0]    2000 
sal[1]    3000 
sal[2]    1000 
emp[0]    10 
emp[1]    20 
emp[2]    30 
ename[0]  rag 
ename[1]  swa 
ename[2]  yag

输出格式:

  emp   ename sal
  ---------------- 
  10    rag   2000 
  20    swa   3000 
  30    yag   1000 

我的查询是:

 SELECT * 
   FROM INPUT 
 PIVOT (
    MAX (VALUE) FOR KEY IN ('EMP[%]' AS EMP,
                            'ENAME[%]' AS ENAME,
                            'SAL[%]' AS SAL
                            )
 );
4

1 回答 1

0

IN子句的子句中列出的PIVOT值应为数据透视列的常量值。虽然条件中的百分号LIKE被认为是通配符,但在IN子句的PIVOT子句中它只是一个文字。

作为选项之一,我们可以使用regexp_substr()正则表达式函数去掉那些方括号(除非它们带有一些特殊值),然后执行枢轴:

SQL> with t1(key1, value1) as(
  2    select 'sal[0]'  ,  '2000'  from dual union all
  3    select 'sal[1]'  ,  '3000'  from dual union all
  4    select 'sal[2]'  ,  '1000'  from dual union all
  5    select 'emp[0]'  ,  '10'    from dual union all
  6    select 'emp[1]'  ,  '20'    from dual union all
  7    select 'emp[2]'  ,  '30'    from dual union all
  8    select 'ename[0]',  'rag'   from dual union all
  9    select 'ename[1]',  'swa'   from dual union all
 10    select 'ename[2]',  'yag'   from dual
 11  )
 12  select emp
 13       , sal
 14       , ename
 15    from ( select regexp_substr(key1, '^[[:alpha:]]+') as key1
 16                , value1
 17                , row_number() over(partition by regexp_substr(key1, '^[[:alpha:]]+') order by value1)
 18             from t1
 19          )
 20  pivot(
 21    max(value1) for  key1 in ('emp' as emp, 'sal' as sal, 'ename' as ename)
 22  )
 23  ;

结果:

EMP  SAL   ENAME
---- ----  -----
10   1000  rag
20   2000  swa
30   3000  yag
于 2013-08-08T07:34:04.067 回答