`
dyccsxg
  • 浏览: 205219 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

Oracle 中的行转列,列转行

阅读更多

# 1. 行转列
原始结构:

NAME                 COURSE                    SCORE
-------------------- -------------------- ----------
zhangsan             语文                         82
zhangsan             数学                         96
lisi                 语文                         80
lisi                 数学                         95
目标结构:
NAME                       语文       数学
-------------------- ---------- ----------
zhangsan                     82         96
lisi                         80         95
# 对应的 sql
create table t1 (name varchar2(10), course varchar2(10), score float);
insert into t1 values('zhangsan', '语文', 82);
insert into t1 values('zhangsan', '数学', 96);
insert into t1 values('lisi', '语文', 80);
insert into t1 values('lisi', '数学', 95);

SQL> select * from t1;
NAME                 COURSE                    SCORE
-------------------- -------------------- ----------
zhangsan             语文                         82
zhangsan             数学                         96
lisi                 语文                         80
lisi                 数学                         95

SQL> select
  2    name,
  3    sum(case course when '语文' then score else 0 end) 语文,
  4    sum(case course when '数学' then score else 0 end) 数学
  5  from t1
  6  group by name;
NAME                       语文       数学
-------------------- ---------- ----------
zhangsan                     82         96
lisi                         80         95

SQL>

# 2. 列转行
原始结构:

NAME                 CHINESE_SCORE MATH_SCORE
-------------------- ------------- ----------
zhangsan                        82         96
lisi                            80         95
目标结构:
NAME                 COURSE            SCORE
-------------------- ------------ ----------
lisi                 数学                 95
lisi                 语文                 80
zhangsan             数学                 96
zhangsan             语文                 82
# 对应的 sql
create table t2(name varchar2(10), chinese_score float, math_score float);
insert into t2 values('zhangsan', 82, 96);
insert into t2 values('lisi', 80, 95);

SQL> select * from t2;
NAME                 CHINESE_SCORE MATH_SCORE
-------------------- ------------- ----------
zhangsan                        82         96
lisi                            80         95

SQL> select name, '语文' course, chinese_score score from t2
  2  union
  3  select name, '数学' course, math_score score from t2;
NAME                 COURSE            SCORE
-------------------- ------------ ----------
lisi                 数学                 95
lisi                 语文                 80
zhangsan             数学                 96
zhangsan             语文                 82

SQL>

# 相关链接
http://www.2cto.com/database/201108/100792.html

分享到:
评论

相关推荐

    Oracle行转列之pivot

    在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...

    oracle行转列,列转行的例子

    oracle行转列,列转行的例子

    oracle行转列

    - T-SQL_经典行专列、列转行,分页及存储过程.doc:T-SQL是SQL Server的扩展,但其中的行转列和分页概念与Oracle相似。在Oracle中,可以使用ROW_NUMBER()函数配合PARTITION BY和ORDER BY来实现分页查询。 - oracle_...

    Oracle行转列

    这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列转行 列转行是指将多个列数据合并成一个列数据。例如,有一个表t_col_row,其中包含多个列c1、c2、c3,...

    Oracle的列转行问题

    列转行(Pivot)和行转列(Unpivot)是两种基本操作,可以将数据按照不同的维度进行组织。传统的列转行方法通常涉及`DECODE`或`CASE`函数与聚合函数如`MAX`或`MIN`的结合,但这些方法可能在处理大量数据时对性能造成...

    oracle的列转行问题

    Oracle 数据库中,列转行问题是一个非常传统的话题。在这个问题中,我们需要将行数据转换成不同的列表示,或者将不同的列数据写到同一列的不同行上。这种问题在实际应用中非常常见,如将学生的成绩从行数据转换到列...

    DB2 SQL 实现行转列,列转行

    DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列

    sql行转列,与列转行

    sql 行转列 与列转行,oracle ,msssql等,详细数据库操作方法,各种例子,欢迎大家学习。、~

    oracle中实现列转行实例

    oracle中实现列转行实例,有表的创建,数据的插入,查询的sql

    ORACLE 列转行 DECODE函数用法

    DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...

    ORACLE行转列

    许多情况下,由于程序中需要将行转为列展示,如果使用ORACLE那么这个资源适合你。

    sql动态行转列 存储过程

    `PIVOT`是Oracle数据库特有的行转列函数,而`CASE`语句则在大多数SQL方言中可用。 3. **执行动态SQL**:使用`EXEC`或`sp_executesql`(在SQL Server中)来执行动态构建的SQL语句。 4. **处理结果**:存储过程可以...

    列转行小工具

    在Oracle Developer中,"列转行小工具"是一种实用功能,它主要用于处理数据库表中的数据,将多列数据转换为单列数据,通常涉及到的是数据的行列转换操作。这种操作在处理复杂的数据分析、报表生成或者接口对接时非常...

    oracle 多列分组和行转列 理解和实例

    理解日常工作中常用到的多列分组, 如【统计不同部门、 不同职位的平均工资】和 行转列 包含例子 和 个人理解分析

    oracle的列转行函数

    SELECT TRIM(',' FROM SYS.STRAGG(A_NAME||NVL2(A_NAME,',','')))as nams FROM A_TEMP

    Oracle逗号分隔列转行实现方法

    因此用到了逗号分隔列转行的方法。目前该方法只适合在oracle数据库中使用。该方法只需要sql语句就可以实现列转行。  下面给出该方法的示例: select a,b,c from(with test as (select ‘aaa’ a,’bbb’ b,’1,2,3...

    Oracle的数据表中行转列与列转行的操作实例讲解

    在Oracle数据库管理中,行转列与列转行是常见的数据操作需求,特别是在数据分析和报表展示时。这两种操作可以通过不同的SQL技巧实现,如使用CASE语句、PIVOT和UNPIVOT操作,以及DECODE函数等。下面将详细介绍如何在...

Global site tag (gtag.js) - Google Analytics