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

oracle中自连接和case when,decode的应用之横表转纵表

阅读更多
有表如下:
sql@kokooa>select * from test026;


        ID NAME                 SUBJECT                   SCORE
---------- -------------------- -------------------- ----------
         1 jim                  语文                         88
         1 jim                  数学                         84
         1 jim                  英语                         90
         2 kate                 语文                         86
         2 kate                 数学                         76
         2 kate                 英语                         96


想得到如下效果:

学生编号 学生姓名   语文 数学 英语

方法:

1.自连接:(这是自连接很典型的用处 应当熟练掌握)
sql@kokooa> select a.id,a.name,a.score as "语文",b.score as "数学",c.score as "英语"
   from test026 a,test026 b,test026 c
   where a.id=b.id and a.subject='语文' and b.subject='数学'
   and a.id=c.id and c.subject='英语';



        ID NAME                       语文       数学       英语
---------- -------------------- ---------- ---------- ----------
         1 jim                            88         84         90
         2 kate                         86         76         96

2 使用case when
sql@kokooa>select id,name,
 sum(case when subject='语文' then score end) as "语文",
 sum(case when subject='数学' then score end) as "数学",
 sum(case when subject='英语' then score end) as "英语"
   from test026
 group by id,name



        ID NAME                       语文       数学       英语
---------- -------------------- ---------- ---------- ----------
         1 jim                           88         84         90
         2 kate                         86         76         96


3 decode
 select max(id) as id,name,
 max(decode(subject,'数学',score)) as "数学",
 max(decode(subject,'语文',score)) as "语文",
 max(decode(subject,'英语',score)) as "英语"
 from test026
 group by name



        ID NAME                       数学       语文       英语
---------- -------------------- ---------- ---------- ----------
         1 jim                          84         88         90
         2 kate                         76         86         96



分享到:
评论

相关推荐

    Oracle_case_when_用法

    详细讲解了case、when的用法.ASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。

    Oracle用decode函数或CASE-WHEN实现自定义排序

    主要介绍了Oracle用decode函数或CASE-WHEN实现自定义排序功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

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

    但是在遇到需要组合条件进行统计时,有时却不如case when 或者另建视图好用。 可是有时就想用DECODE,咋办? 这里给大家介绍一下DECODE如何实现组合条件查询,一句SQL查询一张中国式报表。 (本文的示例,在实际业务...

    mysql仿oracle的decode效果查询

    以下代码在MYSQL中测试通过,MSSQL... #mysql执行 select sum(case when c = ‘1’ then A else B end) from tmp #oracle执行 select sum(decode(c,’1′,a,b)) from tmp #普通联合查询 select sum(d) from ( select

    Oracle事例

    20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...

    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_...

    SQL培训第一期

    属性不依赖于其它非主属性,确保数据表中的每一列数据都和主键直接相关,而不能间接相关,即要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 1.5.3.2 举例 党员表 党员Id 党员姓名 组织Code 符合3NF ...

    oracle获取上一旬的开始时间和结束时间的实现函数

    代码如下: — 获取上旬开始... select case decode(trunc((to_char(v_rq, ‘dd’) – 1) / 10), 0, ‘上旬’, 1, ‘中旬’, ‘下旬’) when ‘上旬’ then –返回上个月的下旬 to_char(add_months(v_rq, -1), ‘yyyyMM

    php.ini-development

    Directive names are *case sensitive* - foo=bar is different from FOO=bar. ; Directives are variables used to configure PHP or PHP extensions. ; There is no name validation. If ...

Global site tag (gtag.js) - Google Analytics