您的位置:首页 > 数据库 > Oracle

oracle 行转列

2013-07-13 00:13 232 查看
oracle   行转列

把如下表格结构

张三 语文
100
张三 数学
100
张三 物理
90
李四 语文
80
李四 数学
85
李四 物理
96

转换成

       name    语文 数学  物理

李四 80
85   96
张三 100
100   90

1、创建表格并插入数据

create table STUDENTS01

(

  NAME01 VARCHAR2(10),

  COURSE VARCHAR2(10),

  SCORE  NUMBER(5,1)

)

备注:VARCHAR2  和  NVARCHAR2的区别 NVARCHAR2和字符集有关,NVARCHAR2(10)可以存10个汉字;VARCHAR2 (10) 可以存5个汉字。

插入数据的sql 省略

方法一,用case实现

第一步:

select name01,

       (case course when '语文' then score end) 语文,

       (case course when '数学' then score end) 数学,

       (case course when '物理' then score end) 物理

from students01  

结果:

     name    语文   数学  物理

1 张三
100

2 张三 100

3 张三 90

4 李四 80

5 李四 85

6 李四 96

第二步 根据名字求和:

select name01,

       sum(case course when '语文' then score end) 语文,

       sum(case course when '数学' then score end) 数学,

       sum(case course when '物理' then score end) 物理

from students01

group by name01

结果:

     name    语文   数学  物理

1 李四
80 85 96

2 张三 100
100 90

第三步 处理 NULL(假如张三的物理为NULL):

select name01,

       nvl(sum(case course when '语文' then score end),0) 语文,

       nvl(sum(case course when '数学' then score end),0) 数学,

       nvl(sum(case course when '物理' then score end),0) 物理

from students01

group by name01

备注:NVL( string1, replace_with) 替换函数, replace_with 替换string1。

注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 行转列