76.Oracle数据库SQL开发之 高级查询——使用PIVOT

76.Oracle数据库SQL开发之 高级查询——使用PIVOT

欢迎转载,转载请标明出处:      http://blog.csdn.net/notbaron/article/details/49975881  

 PIVOT子句是11g的新增特性,可以再查询输出中将行转为列,同时对数据使用聚合函数。11g也新增了UNPIVOT子句,可以在查询输出中将列旋转为行。

         对于了解大量数据的总体趋势是非常有用的。

         查询2003年前4个月产品类型#1,#2,#3的销量,注意查询输出的各个数据展示了每个产品类型在每个月的销量和。

store@PDB1> select * from (

   selectmonth,prd_type_id,amount from all_sales where year=2003

    andprd_type_id in ( 1,2,3))

    pivot (sum(amount) for month in ( 1 as jan,2 as feb,3 as mar,4 as apr))

    order byprd_type_id;

 

PRD_TYPE_ID     JAN          FEB       MAR           APR

----------- ---------- -------------------- ----------

           1  38909.04        70567.9  91826.98   120344.7

           2  14309.04        13367.9  16826.98  15664.7

           3  24909.04        15467.9  20626.98  23844.7

PIVOT是一个功能强大的工具,可以帮助您了解各种产品在各个月的销售趋势。

这个例子分解成一下结构元素:

l  一个内部查询和一个外部查询。内部查询从all_sales表中得到月份、产品类型和销量并将结果传递给外部查询

l  SUM(amount) FOR month IN (1 as jan, 2 as feb, 3 as mar, 4 as apr)这一行属于PIVOT子句

n  SUM函数计算出各产品类型在前4个月的销量。

n  将all_sales表的month列作为被转换的列。这就意味着在输出结果中,月份显示为列。实际上是对行进行旋转或转换,以便将月份显示为列。

l  最后一行ORDER BY 简单的按产品类型对输出数据排序。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值