oracle 行转列分析函数,ORACLE 列转行和行转列的SQL和函数

本文介绍两种行、列转换方法,一种是常规的SQL,一种是ORACLE 11G提供的函数。下面使用一个小例子对这两种方法进行说明。

---------------------------------原始表----------------------------------

SQL> select * from cj1;

NAME  KM            CJ

----- ----- ----------

张三  语文          80

张三  数学          86

张三  英语          75

李四  语文          78

李四  数学          85

李四  英语          79

SQL> select * from cj2;

NAME       YUWEN     SHUXUE     YINGYU

----- ---------- ---------- ----------

张三          80         86         75

李四          78         85         79

---------------------------------常规SQL----------------------------------

--行转列

SQL> SELECT t.name,

2         SUM(decode(t.km, '语文', t.cj, 0)) yuwen,

3         SUM(decode(t.km, '数学', t.cj, 0)) shuxue,

4         SUM(decode(t.km, '英语', t.cj, 0)) yingyu

5    FROM cj1 t

6   GROUP BY t.name;

NAME       YUWEN     SHUXUE     YINGYU

----- ---------- ---------- ----------

张三          80         86         75

李四          78         85         79

--列转行

SQL> SELECT t.name, '语文' km, t.yuwen cj

2    FROM cj2 t

3  UNION

4  SELECT t.name, '数学' km, t.shuxue cj

5    FROM cj2 t

6  UNION

7  SELECT t.name, '英语' km, t.yingyu cj

8    FROM cj2 t;

NAME  KM            CJ

----- ----- ----------

张三  数学          86

张三  英语          75

张三  语文          80

李四  数学          85

李四  英语          79

李四  语文          78

---------------------------------Oracle 11g新特性----------------------------------

--行转列

SQL> SELECT *

2    FROM cj1 t pivot(SUM(t.cj) FOR km IN('语文' yuwen,

3                                         '数学' shuxue,

4                                         '英语' yingyu));

NAME       YUWEN     SHUXUE     YINGYU

----- ---------- ---------- ----------

张三          80         86         75

李四          78         85         79

--列转行

SQL> SELECT * FROM cj2 t unpivot(cj FOR km IN(yuwen , shuxue, yingyu));

NAME  KM              CJ

----- ------- ----------

张三  YUWEN           80

张三  SHUXUE          86

张三  YINGYU          75

李四  YUWEN           78

李四  SHUXUE          85

李四  YINGYU          79

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值