`
lizhiyu211
  • 浏览: 225189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

行转列 oracle sql decode

阅读更多

                                          数据库行转列

困惑已久的行转列的问题 恍然大悟,主要问题出现在对case的理解不够透彻,今天想明白了 记录下来:

简单例子:

将 如下格式的表

 id sid  course   grade

1  1         语文      75

2  1         数学       56

3  1         英语       88

4  2         语文       78

5  2         数学       98

6  2         英语       77

转换成

sid  语文  数学 英语

1     75     56   88

2     78     98   77

 

 

sqlserver建表初始化数据:

CREATE TABLE rowTocolumn(
 [id] [int] IDENTITY(1,1) NOT NULL,
 [sid] [int] NULL,
 [course] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [grade] [float] NULL,
 CONSTRAINT [PK_rowTocolumn] PRIMARY KEY CLUSTERED
(
 [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
)

insert into rowTocolumn(id, sid, course, grade)
values (1, '20060101', '语文', 98.1);
insert into rowTocolumn(id, sid, course, grade)
values (2, '20060102', '语文', 65.5);
insert into rowTocolumn(id, sid, course, grade)
values (3, '20060101', '数学', 87.6);
insert into rowTocolumn(id, sid, course, grade)
values (4, '20060102', '数学', 88.6);
insert into rowTocolumn(id, sid, course, grade)
values (5, '20060101', '英语', 65.2);
insert into rowTocolumn(id, sid, course, grade)
values (6, '20060102', '英语', 79.9);
insert into rowTocolumn(id, sid, course, grade)
values (7, '20060103', '语文', 61.2);
insert into rowTocolumn(id, sid, course, grade)
values (8, '20060103', '数学', 66.5);
insert into rowTocolumn(id, sid, course, grade)
values (9, '20060103', '英语', 83.9);

sqlserver解决办法:

select sid,
       语文 = isnull(sum(case course when '语文' then grade end),0)  ,
       数学 = isnull(sum(case course when '数学' then grade end),0)  ,
       英语 = isnull(sum(case course when '英语' then grade end),0) 
from rowtocolumn
group by sid
order  by sid

 

oracle建表初始化:

create table SC
(
  id    NUMBER,
  sid   VARCHAR2(10),
  cid   VARCHAR2(10),
  grade NUMBER(5,1)
)
;

insert into SC (id, sid, cid, grade)
values (1, '20060101', '语文', 98.1);
insert into SC (id, sid, cid, grade)
values (2, '20060102', '语文', 65.5);
insert into SC (id, sid, cid, grade)
values (3, '20060101', '数学', 87.6);
insert into SC (id, sid, cid, grade)
values (4, '20060102', '数学', 88.6);
insert into SC (id, sid, cid, grade)
values (5, '20060101', '英语', 65.2);
insert into SC (id, sid, cid, grade)
values (6, '20060102', '英语', 79.9);
insert into SC (id, sid, cid, grade)
values (7, '20060103', '语文', 61.2);
insert into SC (id, sid, cid, grade)
values (8, '20060103', '数学', 66.5);
insert into SC (id, sid, cid, grade)
values (9, '20060103', '英语', 83.9);

oracle解决方法1:

select sid,
        nvl(sum(case cid when '语文' then grade end),0)  语文,
        nvl(sum(case cid when '数学' then grade end),0)  数学,
        nvl(sum(case cid when '英语' then grade end),0)  英语
from sc
group by sid
order by sid;

oracle解决方法2:

select sid,
       nvl(sum(decode(cid,'语文',grade)),0) 语文,
       nvl(sum(decode(cid,'数学',grade)),0) 数学,
       nvl(sum(decode(cid,'英语',grade)),0) 英语
from sc
group by sid
order by sid;

 

 

分享到:
评论

相关推荐

    SQL中 decode()函数简介

    DECODE函数,是ORACLE公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式,以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名。 今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网...

    ORACLE SQL性能优化系列(全)

    非常全面的ORACLE SQL性能优化介绍及实例:优化器的选择、共享SQL语句、访问Table的方式、减少访问数据库的次数、使用DECODE函数、减少对表的查询、通过内部函数提高SQL效率、用NOT EXISTS替代NOT IN、使用EXPLAIN ...

    oracle的sql优化

    oracle的sql优化方法 1.全表扫描和索引扫描  大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。  Oracle中通过RowID访问数据是最快的方式  对字段进行函数转换,或者前...

    Oracle DECODE函数语法使用介绍

    到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准。实际上,这种批评有些片面或不够水平。就象有些马车制造商抱怨亨利。福特的“马车”不标准一样。 1 DECODE ...

    Oracle高级sql学习与练习

    6、DECODE函数和行列互换 7、CASE表达式 8、ROWNUM-TOP-N分析 9、相关子查询和非相关子查询 10、增强GROUP BY 11、分析函数(ANALYTICAL FUNCTIONS) 12、ROWID的使用 13、ORACLE 10G正则表达式 14、使用HINT 15、...

    Oracle中DECODE()函数的使用法

    DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。区别于SQL的其它函数,DECODE函数还能识别和操作空值。本文详细介绍了DECODE函数的语法。

    oracle SQL性能优化

    ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) ...

    Oracle SQL 函数使用说明

    Oracle SQL function 包含了大部分的函数说明,如DECODE、LPAD、TO_DATE、TO_CHAR等

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

    014.sql高级查询_去重distinct.mp4 015.sql高级查询_null操作.mp4 016.sql高级查询_in操作.mp4 017.sql高级查询_between-and操作.mp4 018.sql高级查询_like模糊查询.mp4 019.sql高级查询_集合...035.sql函数_decode与

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from ....

    DB2、ORACLE SQL写法的主要区别

    DB2、ORACLE SQL写法的主要区别 1、数据类型转换函数 2、Where条件弱类型判断 3、replace关键字 4、子查询别名 5、DATE数据类型的区别 6、分页的处理 7、decode函数 8、NVL函数 9、substr的不同 10、获取操作系统...

    oracle中decode函数的使用方法

    含义解释:decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: 代码如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ……ELSIF 条件=值n THEN RETURN...

    ORACLE优化SQL语句,提高效率

     Oracle在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等。  (5)在SQL*Plus , SQL*Forms和Pro*C中重新配置ARRAYSIZE参数, 能够增加每次数据库访问的检索数据量 ,建议值为200。  ...

    Oracle数据库Sql性能调优

    1.10 使用DECODE函数来减少处理时间 8 1.11 删除重复记录 8 1.12 用TRUNCATE替代DELETE 9 1.13 尽量多使用COMMIT 9 1.14 计算记录条数 9 1.15 用WHERE子句替换HAVING子句 9 1.16 减少对表的查询 10 1.17 通过内部...

    Oracle Decode()函数使用技巧分享

    今天上头要求做一个类似的功能,初步想到的列转行,但是如何实现也没有什么好办法,这个函数不错DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现...

    ORACLE DECODE函数在中国式报表统计查询中的组合条件实现

    这里给大家介绍一下DECODE如何实现组合条件查询,一句SQL查询一张中国式报表。 (本文的示例,在实际业务中均可扩展,实际统计中类似情况很多) 发布于 南京-江宁 2018-03-09 12:30 本文所有内容均为本人亲测,...

    oracle sql of extracting table structure

    then all_c.data_type || decode(all_c.data_precision,0,'',NULL,'','(' || to_char(all_c.data_precision)) || decode(all_c.data_precision,0,'',NULL,'', decode(all_c.data_scale,0,'',NULL,'', ',' || to_...

    Oracle常用管理SQL

    Oracle常用管理SQL 监控 SQL 1.监控事例的等待: select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*) from v$session_wait group by event order by 4;

    Oracle数据库学习指南

    1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. NULL 使用详解 7. Oracle for NT系统实用工具介绍 8. Oracle ...

Global site tag (gtag.js) - Google Analytics