Oracle 行转列 的写法

php中文网
发布: 2016-06-07 17:15:37
原创
1551人浏览过

Oracle 行转列 的写法: /* DROP TABLE FOO; */ /**创建一张演示的表**/ CREATE TABLE FOO ( BBBID NUMBER(2), --主键

Oracle 行转列 的写法:

/*

DROP TABLE FOO;

*/

/**创建一张演示的表**/

CREATE TABLE FOO (

    BBBID NUMBER(2),       --主键

    DEPID NUMBER(2),      --单位编号

    AAC006 VARCHAR2(1)  --性别  1男  2女  0未知

    CONSTRAINT CK_AAC006 CHECK (AAC006 = '1' OR AAC006 ='2' OR AAC006 ='0')

);

/**插入用于测试的数据**/

INSERT INTO FOO VALUES(1,1,'1');

INSERT INTO FOO VALUES(2,1,'0');

INSERT INTO FOO VALUES(3,1,'2');

INSERT INTO FOO VALUES(4,1,'2');

INSERT INTO FOO VALUES(5,2,'1');

INSERT INTO FOO VALUES(6,2,'0');

INSERT INTO FOO VALUES(7,2,'2');

INSERT INTO FOO VALUES(8,2,'2');

INSERT INTO FOO VALUES(9,3,'2');

INSERT INTO FOO VALUES(10,3,'2');

INSERT INTO FOO VALUES(11,3,'2');

/**

目标:对该表进行行转列,要得到如下结果集:

depid 男 女 未知

 1  2

 1  2

 0  3

*/

/**原始的数据**/

SELECT * FROM FOO;

/**按照性别码表取值,将FOO.AAC006转化为3列之后的值**/

SELECT DEPID,

    DECODE(AAC006,'0',1,0) "男",

    DECODE(AAC006,'1',1,0) "女",

    DECODE(AAC006,'2',1,0) "未知"

 FROM  FOO;

 /**在上一个结果集上进行加工,就得到行转列的结果!**/

 SELECT DEPID,

    SUM(DECODE(AAC006,'0',1,0)) "男",

    SUM(DECODE(AAC006,'1',1,0)) "女",

    SUM(DECODE(AAC006,'2',1,0)) "未知"

 FROM  FOO

 GROUP BY DEPID;


 /**

 总结(czw  20120624):

 行转列,,其实就是将某一个字段,按照码值拆分为若干个字段,最后通过聚集函数得到相应的值。

 **/

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号