暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 枢轴是如何工作的?

askTom 2017-04-19
349

问题描述

嗨,

我试图学习PIVOT概念,以将行枢转到列,但我无法理解它是如何在内部工作的,以及它如何识别哪些行应该变成列。所以你会解释它是如何使行作为列的。

专家解答

枢轴实际上只是句法糖。内部Oracle Database将其转换为 “经典” pivot。即对于您要枢转的每个行值,如果该行没有该值,则有一列返回null。例如:

count ( case when medal = 'Gold' then 1 end )


所以下面的枢轴:

with rws as (
  select mod(rownum, 3) x from dual connect by level <= 10
)
  select * from rws
  pivot (count(*) for x in (0 as zero, 1 as one, 2 as two));

ZERO  ONE  TWO  
3     4    3    


变成:

select "from$_subquery$_003"."ZERO" "ZERO",
    "from$_subquery$_003"."ONE" "ONE",
    "from$_subquery$_003"."TWO" "TWO"
from
  (select nvl ( sum (
    case
      when ( "RWS"."X"=0 ) then 1
    end ) ,0 ) "ZERO",nvl ( sum (
    case
      when ( "RWS"."X"=1 ) then 1
    end ) ,0 ) "ONE",nvl ( sum (
    case
      when ( "RWS"."X"=2 ) then 1
    end ) ,0 ) "TWO"
  from
    ( select mod ( rownum,3 ) "X" from "SYS"."DUAL" "DUAL" connect by level<=10
    ) "RWS"
  ) "from$_subquery$_003"


有关旋转的更多信息,请阅读:

https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论