Oracle中的行转列

最近在做项目过程中,遇到一个常用知识点,想要和大家分享一下,就是行列转换:

我分享的是pivot操作符这种方法。

基本语法:

SELECT *
FROM (
    SELECT column_name, pivot_column, value_column
    FROM your_table
)
PIVOT (
    aggregate_function(value_column)
    FOR pivot_column IN (pivot_value1, pivot_value2, ...)
);

  --column_name   是你希望保留的列。
  --pivot_column    是你希望转换为列头的列。
  --value_column   是包含要转换为列值的数据的列。
  --aggregate_function   是你希望对  value_column  中的数据执行的聚合函数,                                                                     例如 sum,avg,max,min等
  --pivot_value1, pivot_value2, ...   是  pivot_column  中可能出现的值,这些值将转换为列头。

举例说明:

       假设我们有一个销售数据表  sales  ,其中包含  year  ,   product  , 和  amount  三个字段。我们想要将每年的销售额按产品分类进行汇总,转换为列。

sql写法:

SELECT *
FROM (
    SELECT year, product, amount
    FROM sales
)
PIVOT (
    SUM(amount)
    FOR product IN ('ProductA' AS ProductA, 'ProductB' AS ProductB, 'ProductC' AS ProductC)
);

        这个查询会生成一个结果集,其中包含每一年的  ProductA  ,   ProductB  , 和  ProductC  的销售额。
 
----注意事项:
 
  1.PIVOT  操作符要求  pivot_column  和  value_column  必须是数值类型或日期类型。
  2.PIVOT  操作符不支持动态列名,即你必须在查询中明确指定  pivot_value  。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值