首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle数据透视行到列模式匹配

Oracle数据透视行到列模式匹配
EN

Stack Overflow用户
提问于 2022-02-02 13:19:01
回答 2查看 36关注 0票数 0

我希望将行重新排列为列(在下面的tbl2中),以计数EXEN的出现次数,以及MPACODE列以MPA开头的任何代码。

代码语言:javascript
复制
SELECT *
FROM   (select code from tbl2 where pidm='4062161')
PIVOT  (count(*) FOR (code) IN ('EXEN' AS EXEN, 'MPA%' AS MPACODE));

tbl2:

期望产出:

实际产出:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-02 13:48:31

必须执行中间步骤才能将所有MPA%转换为MPA(参见子查询dt2 )。

代码语言:javascript
复制
with dt as (
select 'EXEN' code from dual union all
select 'MPA'||rownum from dual connect by level <= 10),
dt2 as (
select 
case when code like 'MPA%' then 'MPA' else code end as code
from dt)
select *
from dt2
pivot (
count(*) for
(code) IN ('EXEN' AS EXEN, 'MPA' AS MPACODE));

      EXEN    MPACODE
---------- ----------
         1         10

PIVOT执行相同的比较(不是LIKE),因此这是无效的:'MPA%' AS MPACODE和查询失败的原因。

票数 1
EN

Stack Overflow用户

发布于 2022-02-02 14:16:45

例如:

代码语言:javascript
复制
  select
   count(case when code='EXEN' then 1 end) exen,
   count(case when code like 'MPA%' then 1 end) mpacode
     from  tbl2 where pidm='4062161';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70956357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档