76.Oracle数据库SQL开发之 高级查询——使用PIVOT
欢迎转载,转载请标明出处: http://blog.youkuaiyun.com/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 简单的按产品类型对输出数据排序。