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

308 阅读1分钟

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 简单的按产品类型对输出数据排序。