orecale加列(oracle添加列的语句)

orecale加列(oracle添加列的语句)行列转换 或者说 amp 34 枢转 可以使用 pivot unpivot 实现 1 pivot 行转列 pivot 行转列 语法 select columns from table pivotXML 准备一些数据 如下 一个典型的写法 select from students2 pivot sum age for name in

大家好,我是讯享网,很高兴认识大家。



行列转换, 或者说"枢转", 可以使用pivot, unpivot实现

1. pivot 行转列

pivot (行转列)语法:

    select columns from table     pivotXML

准备一些数据, 如下:

一个典型的写法:

    select * from students2     pivot(       sum(age) for name in('sdger','erw','wer')     )

结果:

分析:

      1. 使用 select * 通常被认为不好, 但是一定要注意此时不能查询一些与逻辑发生冲突的列, 例如: select id 可以, 但是select name, age 却不行, 因为语法本就是行转列 (将name放到行, 数据是age), 尽量由pivot决定显示的内容.       2. 使用sum(age)不能使用age, 就如同使用group by一样, 查询的数据需要满足划分之后的逻辑.       3. 观察上述结果, wer那一列, 它没有发生sum()的计算, 原因很简单wer的id不同, 这说明pivot默认进行全字段分组(这里是对id分了组再计算的sum).       4. null值表示没有数据, 比如没有id=6, 同时name='sdger'的数据, 不能显示其sum(age).

那么, 如果想进行指定分组字段, 例如想不要进行id分组, 同一id的数据合并:


讯享网

    select * from (select name,age from students2)      pivot(       sum(age) for name in('sdger','erw','wer')     ) –使用子查询的方式, 提前约束处理的数据即可.

结果:

使用where:

    select * from students2     pivot(       ….     )where ….     或者     select …. from (select … from table where ….)     pivot(       ….     )

起别名:

执行多个聚合:

按照多列分组:

使用XML进行pivot:

XML数据展开后如下:

另外:

2. unpivot 列转行

unpivot (列转行)语法:

    select * from table     unpivot include|exclude nulls

一个简单示例:

数据默认不包含NULL值, 即exclude nulls.

如果要包含NUll值:

起别名:

注意: 别名必须使用单引号否则报错

小讯
上一篇 2025-05-23 14:56
下一篇 2025-05-08 09:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176072.html