`

Oracle 行转列 的写法

阅读更多


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      1   1  2
2      1   1  2
3      0   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):
行转列,其实就是将某一个字段,按照码值拆分为若干个字段,最后通过聚集函数得到相应的值。
**/
  • 大小: 36.6 KB
分享到:
评论

相关推荐

    oracle 行转列

    oracle 行转列的sql语句写法, 附带例子

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    oracle数据库添加或删除一列的sql语句

    alert table 表名 add column 列名 alter table 表名 drop column 列名 eg: alter table TPointManage add AddPointsReason ... 您可能感兴趣的文章:Oracle 查看表空间的大小及使用情况sql语句oracle常用sql语句Ora

    oracle学习日志总结

    4. Select 中 避免使用*, oracle需要转换成表的列,通过查询数据字典获得,耗费时间). 5. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序尽可能的让字段顺序与索引顺序...

    Oracle数据库、SQL

    2.9消除重复行 6 2.10其他注意事项 6 三、 SQL语句的处理过程 7 3.1 SQL语句处理过程 7 3.2处理一条select语句 7 四、 where子句 8 4.1 where子句后面可以跟什么 8 4.2语法和执行顺序 8 4.3字符串是大小写敏感的,在...

    Oracle-SQL基础到存储过程下载(第二阶段)

    025.sql高级查询_关联之oracle特有写法.mp4 026.sql基础练习_经典18题.mp4 027.sql高级查询_伪列rowid.mp4 028.sql高级查询_伪列rownum.mp4 029.sql函数_字符函数.mp4 030.sql函数_数字函数.mp4 031.sql函数_日期...

    oracle动态性能表

    1:语法是否合法(sql写法) 2:语义是否合法(权限,对象是否存在) 3:检查该sql是否在共享池中存在 -- 如果存在,直接跳过4和5,运行sql. 此时算soft parse 4:选择执行计划 5:产生执行计划 -- 如果5个步骤全做,这就叫...

    收获不知Oracle

    2.3.2.5 集合写法,飞机速度 77 2.3.2.6 直接路径,火箭速度 78 2.3.2.7 并行设置,飞船速度 79 2.3.3 精彩的总结与课程展望 80 2.3.3.1 最大的收获应该是思想80 2.3.3.2 老师的课程展望与规划81 第3章神奇,走进...

    Oracle事例

    check 检查约束,使列的值符合一定的标准范围 unqiue 唯一性约束 foreign key 外部键约束 29、查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据...

    经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等的组件

    经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等;上手简单,0学习成本,按照sql书写习惯编写C#.NET代码;轻量级,高性能,接近手写Sql;支持SqlServer(2000至最新版),MySql,Oracle,Access,...

    SQL培训第一期

    伪列不是表的真实列,但是你可以象使用真实列一样使用伪列,常用伪列:rowid行的绝对物理编号,每一行是唯一的。rownum序号,返回查询结果的每行序号。系统时间sysdate,返回系统当前时间。 2.1.4.2 伪表 select * ...

    2009达内SQL学习笔记

    ORDER BY子句中使用的列将是为显示所选择的列,但是实际上并不一定要这样,用非检索的列排序数据是完全合法的。 为了按多个列排序,列名之间用逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,...

    SQL 优化原则

    (转)SQL 优化原则 一、问题的提出  在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中...

    SQL性能优化

     任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。  避免不必要的类型转换,要了解“隐藏”的类型转换。  增加查询的...

    sql总结.doc

    数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。 3. 逻辑数据独立性。视图可以使应用程序和数据库表在...

    高级SQL优化(二)

    >,即使该列建立了索引,则该索引也不会被使用;如果不恰当的使用了NOT,则索引也不会被使用。Oracle10g起,在基于CBO的优化器模式下Oralce会进行自动优化,但在基于RBO(基于规则)的优化器模式下,依然保持此规则...

    Dos.ORM:Dos.ORM于2009年发布、2015年正式开源,该组件已在数百个成熟项目中应用。初期开发过程中吸取了NBear与MySoft的一些精华并加入新思想,之后参考EF Lambda语法进行大量扩展。经过数十个版本的更新迭代发布全新v2.0版本,支持动态列表、分库分表等。官方网站:https

    经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等。官方网站: 交流群:60831381 Dos.ORM特点:? 上手简单,0学习成本,按照sql书写习惯编写C#.NET代码 轻量级,高性能,接近手写Sql ...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

Global site tag (gtag.js) - Google Analytics