Oracle SQL 数据透视查询
我的表中有数据,如下所示:
MONTH VALUE
1 100
2 200
3 300
4 400
5 500
6 600
我想编写一个 SQL 查询,结果如下:
MONTH_JAN MONTH_FEB MONTH_MAR MONTH_APR MONTH_MAY MONTH_JUN
100 200 300 400 500 600
I have data in a table as seen below:
MONTH VALUE
1 100
2 200
3 300
4 400
5 500
6 600
I want to write a SQL query so that result is given as below:
MONTH_JAN MONTH_FEB MONTH_MAR MONTH_APR MONTH_MAY MONTH_JUN
100 200 300 400 500 600
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Oracle 11g 及更高版本
从 Oracle 11g 开始,您现在可以使用
PIVOT
运算符来实现该结果:Oracle 11g and above
As of Oracle 11g, you can now use the
PIVOT
operator to achieve that result:Oracle 9i+ 支持:
您只列出两列——类似这样的内容可能应该按年份分组。
有 ANSI PIVOT(和 UNPIVOT)语法,但 Oracle 直到 11g 才支持它。在 9i 之前,您必须用 Oracle 特定的 DECODE 替换 CASE 语句。
Oracle 9i+ supports:
You only list two columns -- something like this should probably be grouped by year.
There is ANSI PIVOT (and UNPIVOT) syntax, but Oracle didn't support it until 11g. Prior to 9i, you'd have to replace the CASE statements with Oracle specific DECODE.
Oracle 11g+的动态透视
Oracle 的 SQL 中没有直接的动态透视方法,除非它返回
XML
类型结果。对于
非 XML
结果,可以通过创建SYS_REFCURSOR
返回类型的函数来使用 PL/SQL带有PIVOT子句
带有条件聚合
调用该函数
,然后可以从SQL Developer的命令行
演示
Dynamic Pivot for Oracle 11g+
There’s no straightforward method for dynamic pivoting in Oracle’s SQL, unless it returns
XML
type results.For the
non-XML
results PL/SQL might be used through creating functions ofSYS_REFCURSOR
return typeWith PIVOT Clause
With Conditional Aggregation
and then the function can be invoked as
from SQL Developer's command line
Demo
如何获取表的枢轴
how to get pivot of the table