`

ORACLE学习笔记--合并多行数据到一行中

阅读更多

本人使用Oracle时,遇到以下情况:需要输出多列数据,但是这些数据却分布在多行的同一列中。所以本人就想出了以下这种方式进行合并查询。

示例是一个GRADES表,记录每个学生的姓名、课程和分数,分数都放在GRADE列中,现在要将各个科目的分数放到一行中显示怎么办?

1,创建表GRADES,并插入数据

CREATE TABLE GRADES
(
  ID     NUMBER PRIMARY KEY,
  NAME   VARCHAR2(10) NOT NULL,
  COURSE VARCHAR2(10) NOT NULL,
  GRADE  NUMBER NOT NULL
);
COMMIT;
DELETE FROM GRADES;
COMMIT;
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(1,'周健','SX',78);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(2,'周健','YW',88);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(3,'周健','WL',42);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(4,'周健','HX',100);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(5,'张海威','SX',69);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(6,'张海威','YW',95);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(7,'张海威','WL',46);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(8,'张超','SX',31);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(9,'张超','YW',97);
INSERT INTO GRADES(ID,NAME,COURSE,GRADE) VALUES(10,'张超','HX',89);
COMMIT;

 

2,合并查询

 

SELECT 
NAME 姓名,
NVL(SUM(DECODE(COURSE,'SX',GRADE))||'','未修') 数学,
NVL(SUM(DECODE(COURSE,'YW',GRADE))||'','未修') 语文,
NVL(SUM(DECODE(COURSE,'WL',GRADE))||'','未修') 物理,
NVL(SUM(DECODE(COURSE,'HX',GRADE))||'','未修') 化学
FROM GRADES
GROUP BY NAME;

 

其实,这个SQL语句的第一步是将每一行记录进行扩展,使用DECODE函数将记录分数的一列数据,扩展成为分别记录各个科目分数的多列数据。第二步,使用GROUP BY 对每个人进行分组,然后合并分组,得到数据。

 

3,更清晰的合并查询

SELECT 
    NAME 姓名,
    NVL(SUM(SX)||'','未修') 数学,
    NVL(SUM(YW)||'','未修') 语文,
    NVL(SUM(WL)||'','未修') 物理,
    NVL(SUM(HX)||'','未修') 化学
FROM 
(
    SELECT 
    NAME,
    DECODE(COURSE,'SX',GRADE) SX,
    DECODE(COURSE,'YW',GRADE) YW,
    DECODE(COURSE,'WL',GRADE) WL,
    DECODE(COURSE,'HX',GRADE) HX
    FROM GRADES
)
GROUP BY NAME;

 

1
1
分享到:
评论

相关推荐

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    sql实现多行合并一行

    在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...

    一列分割成多列,多行合并为一行

    SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    oracle10g,9i多行合并一行函数

    在Oracle 10g中,可以通过`wmsys.wm_concat()`函数来轻松地将多行数据合并到一行中。此函数可以接受多个输入参数,并返回一个由所有参数组成的字符串列表。默认情况下,这些值会用逗号`,`分隔。如果需要使用其他字符...

    oracle数据库一行拆成多行.sql

    oracle数据库一行拆成多行.sql

    Oracle多行记录合并

    在Oracle数据库中,多行记录的合并通常是为了将相同字段的多行数据整合成一行,以便于数据分析或者简化展示。这种操作在报表制作、数据整理等场景中非常常见。本篇文章将详细介绍Oracle中实现多行记录合并的几种方法...

    oracle多行合并一行

    在Oracle数据库中,有时候我们需要将多行数据合并成一行进行展示或处理,尤其是在报表生成、数据展示等场景中。本文将详细介绍如何使用Oracle纯SQL语句实现这一功能,并通过具体示例来帮助理解。 #### 一、问题背景...

    Oracle 分割字符串 返回多行数据

    Oracle 分割字符串 返回多行数据

    oracle学习笔记-基础

    Oracle数据库是世界上最流行的数据库管理系统之一,广泛应用于企业级的数据存储和管理。在Oracle学习中,了解数据库的启动、关闭以及其基本操作是非常重要的基础知识。以下是对Oracle数据库启动、关闭及体系结构的...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    在Oracle 11g及更高版本中,`LISTAGG`函数提供了一种简洁的方式来合并多行记录。它可以方便地处理聚合字符串,而且支持排序。例如: ```sql SELECT country, LISTAGG(city, ', ') WITHIN GROUP (ORDER BY city) ...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    Oracle学习笔记——日常应用、深入管理、性能优化 示例代码

    Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...

    oracle某个字段多行记录转化为一行

    此标题明确指出了解决的问题:在Oracle数据库中,如何将特定字段的多行记录合并成一行记录。这种需求通常出现在报告或数据分析的过程中,当需要将多个相关的值组合在一起进行展示或进一步处理时。 ### 描述理解 ...

    成功之路Oracle11g学习笔记-赵振平

    成功之路Oracle11g学习笔记-赵振平 请下载2个附件

    Oracle学习笔记

    Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接、交叉连接、自然...

    Oracle学习笔记.pdf

    以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL语句的执行顺序是:`FROM` -> `WHERE` -> `SELECT` -> `GROUP BY` -> `HAVING` -> `ORDER BY`。首先从`FROM`子句开始,确定...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

Global site tag (gtag.js) - Google Analytics