`
vefan
  • 浏览: 85580 次
  • 性别: 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 数据显示 横表转纵表

    本文将详细介绍如何在Oracle中使用DECODE和CASE语句进行横表转纵表的操作。 首先,我们需要理解横表和纵表的概念。横表是列数多行数少的数据结构,而纵表则是行数多列数少,通常用于将具有相同类别但不同属性的数据...

    decode函数与case when 的妙用

    在数据库管理和SQL编程中,`DECODE`函数和`CASE WHEN`语句是两种非常重要的逻辑判断工具,它们常用于处理条件分支和数据转换。在这篇文章中,我们将深入探讨这两种方法的用途、区别以及如何巧妙地运用它们。 首先,...

    Oracle_case_when_用法

    在 Oracle 数据库中,`CASE WHEN` 表达式提供了一种在 SQL 查询中实现条件判断的方法,这使得开发人员能够在不使用 PL/SQL 的情况下编写更为灵活和复杂的查询语句。`CASE WHEN` 与 `DECODE()` 函数相似,但因其符合 ...

    Oracle-Decode()函数和CASE语句的比较

    Oracle数据库中的`Decode()`函数和`CASE`语句都是用于条件判断和数据转换的重要工具,它们各有特点,适用场景也有所不同。以下是对这两个功能的详细比较。 首先,`Decode()`函数是一个简化的条件表达式,它允许你在...

    ORACLE 列转行 DECODE函数用法

    在实际工作中,你可能还需要结合其他SQL函数,如CASE WHEN或NVL,来进一步增强DECODE的功能。例如,当你需要处理可能的NULL值时,NVL函数可以提供一个默认值,防止因NULL而导致的结果异常。 总之,Oracle的DECODE...

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

    `DECODE`函数和`CASE-WHEN`语句都是实现这一目标的有效工具。根据实际的业务需求和性能考虑,可以选择合适的方法进行应用。在编写SQL时,确保理解并充分利用这些高级功能,可以提升代码的可读性和执行效率。希望本文...

    oracle case when 语句的用法详解

    Oracle的CASE WHEN语句是SQL查询中的一个非常重要的条件判断工具,它允许你在单个查询中根据不同的条件执行不同的操作。CASE WHEN语句有两种主要形式:简单CASE和搜索CASE。 **1. 简单CASE函数** 简单CASE主要用于...

    oracle的decode函数

    在Oracle数据库中,`DECODE`函数是一种非常实用的条件判断函数,其功能类似于编程语言中的`IF`语句。通过比较输入值与一系列预设值,该函数能够根据匹配情况返回相应的结果。 #### 二、DECODE函数的基本语法 `...

    [数据库] Oracle使用CASE判断解决多值问题1

    为了简化这一过程,我们可以利用Oracle SQL的内置函数,如DECODE和CASE WHEN,直接在数据库层面进行处理。 首先,尝试使用DECODE函数。DECODE函数允许我们根据指定的条件返回不同的值。例如,DECODE(ZY_TYPE, '国家...

    oracle的列转行问题

    在 Oracle 中,通常使用 decode 或者 case 函数与聚合函数联合实现列转行功能。但是,这种方法存在一些缺陷,例如性能问题和数据重复访问问题。在本文中,我们将介绍一种新的解决方案,来解决 Oracle 列转行问题。 ...

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

    通过以上示例可以看出,尽管`DECODE`函数在复杂组合条件下的统计查询中可能存在一定的局限性,但通过巧妙的设计和应用,仍然能够有效地满足大多数业务场景的需求。此外,这种方式对于生成所谓的“中国式报表”(即...

    从oracle生成表的数据字典方法

    在Oracle数据库管理中,数据字典是一个非常重要的工具,它能够帮助我们理解数据库结构、表定义以及列属性等详细信息。本篇文章将介绍如何从Oracle数据库中利用COMMENT生成Excel格式的数据字典。 #### 一、Oracle...

    ORACLE转DB2对照全解

    ### ORACLE转DB2对照全解 #### 一、Oracle SQL PL与DB2 inline SQL PL对比 本章节主要介绍Oracle SQL PL与DB2 inline SQL PL之间的对比,包括但不限于存储过程、触发器、用户定义函数(UDF)、条件语句及流程控制...

    oracle练习_面试题

    Oracle 提供了两种函数来实现条件选择,即 CASE 函数和 DECODE 函数。CASE 函数可以根据条件选择不同的值,DECODE 函数可以根据条件选择不同的值或表达式。 示例: ```sql SELECT t.ename, CASE t.deptno WHEN ...

    Oracle的110个自带函数总结归纳

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心优势之一。在Oracle中,函数用于处理各种类型的数据,包括数学运算、字符串处理、日期时间操作、逻辑判断等。以下是对...

    oracle sql 行列转换

    在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...

    mysql与oracle差异总结

    MySql 中的 CASE WHEN 语句可以替换 DECODE 函数。MySql 中的 TEXT 等同于 Oracle 中的 LONG 函数。 13. 日期函数 MySql 中的 EXTRACT 函数可以提取日期的年、月、日等信息,而 Oracle 需要使用 TO_CHAR 函数来...

Global site tag (gtag.js) - Google Analytics