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

行转列 oracle sql decode

阅读更多

                                          数据库行转列

困惑已久的行转列的问题 恍然大悟,主要问题出现在对case的理解不够透彻,今天想明白了 记录下来:

简单例子:

将 如下格式的表

 id sid  course   grade

1  1         语文      75

2  1         数学       56

3  1         英语       88

4  2         语文       78

5  2         数学       98

6  2         英语       77

转换成

sid  语文  数学 英语

1     75     56   88

2     78     98   77

 

 

sqlserver建表初始化数据:

CREATE TABLE rowTocolumn(
 [id] [int] IDENTITY(1,1) NOT NULL,
 [sid] [int] NULL,
 [course] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [grade] [float] NULL,
 CONSTRAINT [PK_rowTocolumn] PRIMARY KEY CLUSTERED
(
 [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
)

insert into rowTocolumn(id, sid, course, grade)
values (1, '20060101', '语文', 98.1);
insert into rowTocolumn(id, sid, course, grade)
values (2, '20060102', '语文', 65.5);
insert into rowTocolumn(id, sid, course, grade)
values (3, '20060101', '数学', 87.6);
insert into rowTocolumn(id, sid, course, grade)
values (4, '20060102', '数学', 88.6);
insert into rowTocolumn(id, sid, course, grade)
values (5, '20060101', '英语', 65.2);
insert into rowTocolumn(id, sid, course, grade)
values (6, '20060102', '英语', 79.9);
insert into rowTocolumn(id, sid, course, grade)
values (7, '20060103', '语文', 61.2);
insert into rowTocolumn(id, sid, course, grade)
values (8, '20060103', '数学', 66.5);
insert into rowTocolumn(id, sid, course, grade)
values (9, '20060103', '英语', 83.9);

sqlserver解决办法:

select sid,
       语文 = isnull(sum(case course when '语文' then grade end),0)  ,
       数学 = isnull(sum(case course when '数学' then grade end),0)  ,
       英语 = isnull(sum(case course when '英语' then grade end),0) 
from rowtocolumn
group by sid
order  by sid

 

oracle建表初始化:

create table SC
(
  id    NUMBER,
  sid   VARCHAR2(10),
  cid   VARCHAR2(10),
  grade NUMBER(5,1)
)
;

insert into SC (id, sid, cid, grade)
values (1, '20060101', '语文', 98.1);
insert into SC (id, sid, cid, grade)
values (2, '20060102', '语文', 65.5);
insert into SC (id, sid, cid, grade)
values (3, '20060101', '数学', 87.6);
insert into SC (id, sid, cid, grade)
values (4, '20060102', '数学', 88.6);
insert into SC (id, sid, cid, grade)
values (5, '20060101', '英语', 65.2);
insert into SC (id, sid, cid, grade)
values (6, '20060102', '英语', 79.9);
insert into SC (id, sid, cid, grade)
values (7, '20060103', '语文', 61.2);
insert into SC (id, sid, cid, grade)
values (8, '20060103', '数学', 66.5);
insert into SC (id, sid, cid, grade)
values (9, '20060103', '英语', 83.9);

oracle解决方法1:

select sid,
        nvl(sum(case cid when '语文' then grade end),0)  语文,
        nvl(sum(case cid when '数学' then grade end),0)  数学,
        nvl(sum(case cid when '英语' then grade end),0)  英语
from sc
group by sid
order by sid;

oracle解决方法2:

select sid,
       nvl(sum(decode(cid,'语文',grade)),0) 语文,
       nvl(sum(decode(cid,'数学',grade)),0) 数学,
       nvl(sum(decode(cid,'英语',grade)),0) 英语
from sc
group by sid
order by sid;

 

 

分享到:
评论

相关推荐

    oracle动态行转列

    Oracle的动态行转列技术,通过巧妙利用存储过程和动态SQL,为数据分析师和开发者提供了一种强大且灵活的数据转换工具。无论是对于初学者还是有经验的数据库管理员,掌握这一技能都将极大地提升数据处理的效率和效果...

    ORACLE 列转行 DECODE函数用法

    在Oracle数据库中,DECODE函数是一个非常实用的工具,它允许你在SQL查询中进行条件判断,将特定的值转换为其他值。DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。...

    oracle行转列oracle行转列

    在Oracle数据库中,将行数据转换为列数据是一种...总结来说,Oracle中的行转列操作主要依赖于`DECODE`函数和`GROUP BY`子句,以及动态SQL技术,这些工具可以帮助我们更有效地管理和展示数据,满足复杂的数据分析需求。

    oracle 行转列

    ### Oracle 行转列知识点详解 #### 一、Oracle 行转列概念及应用场景 在数据库操作中,经常需要对数据进行格式上的调整以便更好地分析或展示数据。其中,“行转列”是一种常见的数据处理方式,它指的是将原本存储...

    oracle行转列较精典的解决方案

    #### 一、使用SQL decode函数进行行转列 ##### 1. 实现思路 通过使用`decode`函数结合`sum`聚合函数可以实现行转列的功能。`decode`函数可以根据不同的条件返回不同的值,当用于行列转换时,可以通过设置不同的...

    Oracle行转列

    Oracle行转列 Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列...

    关于oracle decode函数的用法

    在商品销售表`sale`的转化示例中,使用了DECODE函数来将每月的销售数据从行转为列,形成年份为行,各月销售金额为列的新结构。例如,为了计算每年1月的销售总额,使用了`SUM(DECODE(SUBSTRB(month,5,2),'01',sell,0)...

    Oracle中Decode()函数的有关用法

    ### Oracle中Decode()函数的有关用法 #### 一、Decode()函数简介 在Oracle数据库中,`DECODE()`函数是一种非常实用的功能,主要用于条件判断并返回特定的值。它提供了一种简单的方法来实现多分支逻辑判断,尤其是...

    Oracle中Decode()函数使用技巧

    Oracle中的Decode()函数是数据库查询时非常实用的一个工具,它允许你在SQL语句中实现简单的条件判断,类似于IF-THEN-ELSE逻辑。这个函数在处理数据时提供了灵活性,避免了复杂的CASE语句,使得代码更加简洁易读。...

    DBA对Oracle SQL编写规范的总结

    ### DBA对Oracle SQL编写规范的总结 #### 一、引言 在Oracle数据库开发过程中,遵循一套标准化的SQL编写规范对于提升代码质量、增强可读性和可维护性至关重要。本文档由一位经验丰富的数据库管理员(DBA)撰写,旨在...

    Oracle Sql基础 Oracle Sql基础 Oracle Sql基础

    ### Oracle SQL 基础知识点概述 #### 一、Oracle SQL 运行环境与SQL语法 **1.1 SQL 的起源与分类** - **1.1.1 SQL 的起源** - SQL(Structured Query Language)即结构化查询语言,首次出现是在1970年代初期由...

    oracle SQL优化技巧

    Oracle SQL 优化技巧 Oracle SQL 优化是提高数据库性能的关键技巧之一。以下是 Oracle SQL 优化的 12 个技巧: 1. 选择最有效率的表名顺序 在基于规则的优化器中,Oracle 的解析器按照从右到左的顺序处理 FROM ...

    Oracle 中 decode 函数用法

    Oracle中的DECODE函数是一种非常实用的工具,它允许你在SQL查询中执行简单的条件判断和返回相应的值。这个函数类似于IF-THEN-ELSE语句的简写形式,减少了编写复杂逻辑的代码量,使得SQL语句更加简洁易读。 DECODE...

    oracle sql 內置函數大全.ppt

    Oracle SQL 内置函数是数据库查询和管理的重要工具,它们提供了对数据的广泛操作和处理能力。本资料“Oracle SQL 内置函數大全”详细介绍了这些函数的使用,包括数学函数、字符串函数、日期时间函数、转换函数、比较...

    OracleSql脚本书写规范

    Oracle SQL脚本书写规范是确保代码可读性、性能优化以及团队协作的重要准则。遵循这些规范可以帮助初学者更好地理解和编写高效的SQL查询,避免不必要的错误,提高开发效率。以下是一些关键的Oracle SQL书写规范: *...

Global site tag (gtag.js) - Google Analytics