`
jqs1124
  • 浏览: 44235 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle行转列/行变列

 
阅读更多

在写一些复杂的SQL的时候,经常需要使用到行变列的技巧,一些帐务系统的统计也经常会写到这样的SQL。主要用到了max、decode或nvl这些函数来达到目的。写下来让大家互相学习学习!下面是一个行变列的例子。

如表ROW2COLUMN2有以下数据:

名字 课程 分数

1 张三 语文 80
2 张三 数学 86
3 张三 英语 75
4 李四 语文 78
5 李四 数学 85
6 李四 英语 78

想变成下面记录:

名字 语文 数学 英语

1 李四 78 85 78
2 张三 80 86 75

----------------------------------------------

CREATE TABLE ROW2COLUMN2(NAME_ VARCHAR2(20),
CLASS VARCHAR2(50),
SCORE NUMBER(3));

INSERT INTO ROW2COLUMN2 VALUES ('张三', '语文', 80);
INSERT INTO ROW2COLUMN2 VALUES ('张三', '数学', 86);
INSERT INTO ROW2COLUMN2 VALUES ('张三', '英语', 75);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '语文', 78);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '数学', 85);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '英语', 78);

SELECT * FROM ROW2COLUMN2;

SELECT NAME_,
MAX(DECODE(CLASS, '语文', T.SCORE, 0)) 语文,
MAX(DECODE(CLASS, '数学', T.SCORE, 0)) 数学,
MAX(DECODE(CLASS, '英语', T.SCORE, 0)) 英语

FROM ROW2COLUMN2 T
GROUP BY NAME_;

分享到:
评论
2 楼 zhengyong7232 2012-11-29  
表test
NAME
KM
CJ
张三
语文
80
张三
数学
86
张三
英语
75
李四
语文
78
李四
数学
85
李四
英语
79
表test2
NAME
语文
数学
英语
张三
80
86
75
李四
78
85
79
行转列sql ------test->test2
SELECT NAME,
       SUM(decode(t.km, '语文', t.cj, 0)) 语文,
       SUM(decode(t.km, '数学', t.cj, 0)) 数学,
       SUM(decode(t.km, '英语', t.cj, 0)) 英语
  FROM test t
GROUP BY t.name
列转行sql ------test2->test
select t.name,'语文' AS km,t.语文 AS cj from test2 t
UNION ALL
select t.name,'数学' AS km,t.数学 AS cj from test2 t
UNION ALL
select t.name,'英语' AS km,t.英语 AS cj from test2 t
ORDER BY name
1 楼 zhengyong7232 2012-11-28  
create table test_tab(province varchar2(20),landscapes varchar2(50));
insert into test_tab values('北京','故宫');
insert into test_tab values('北京','颐和园');
insert into test_tab values('北京','长城');
insert into test_tab values('上海','外滩');
insert into test_tab values('上海','浦东');
insert into test_tab values('上海','世博园');
insert into test_tab values('四川','蜀南竹海');
SELECT * FROM test_tab;

SELECT t.province,
DECODE(landscapes, '故宫', T.landscapes, '' ) a1,
DECODE(landscapes, '颐和园', T.landscapes, '')  a2,
DECODE(landscapes, '长城', T.landscapes,'' ) a3
FROM test_tab T

SELECT t.province,
max(DECODE(landscapes, '故宫', T.landscapes, '')) a1,
max(DECODE(landscapes, '颐和园', T.landscapes, '')) a2,
max(DECODE(landscapes, '长城', T.landscapes,'')) a3
FROM test_tab T
GROUP BY t.province


select a.province,a.a1||','||a.a2||a.a3 as aa from
(SELECT t.province,
max(DECODE(landscapes, '故宫', T.landscapes, '')) a1,
max(DECODE(landscapes, '颐和园', T.landscapes, '')) a2,
max(DECODE(landscapes, '长城', T.landscapes,'')) a3
FROM test_tab T
GROUP BY t.province) a

相关推荐

    Oracle行转列(不定列)

    本篇文章将详细探讨Oracle如何实现行转列为列的过程,以及在面对不确定列数时的解决方案。 在传统的SQL查询中,数据通常是以行的形式存储和展示。然而,在某些场景下,我们可能需要将同一类别的数据从多行转换为一...

    oracle动态行转列

    本文将深入探讨如何通过Oracle中的存储过程实现动态“行转列”,并结合给定文件的信息,详细解析其工作原理、优点及应用场景。 ### 核心知识点:Oracle动态行转列 #### 1. 存储过程与动态SQL 存储过程是预编译的...

    Oracle行转列之pivot

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

    oracle行转列

    - oracle行转列.doc:再次强调了Oracle中的行转列技术,可能包括了不同的实现方法和实例。 - oracle_行转列的通用过程.docx:可能是一个详细的行转列通用过程的指南,包括步骤和示例代码。 - PLSQL函数速查.txt:...

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

    ### Oracle行转列的经典解决方案 在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常...

    oracle 行转列

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

    Oracle行转列

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

    oracle行转列,列转行的例子

    oracle行转列,列转行的例子

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 实现行转列功能并使用逗号进行隔开拼接成为一条数据 Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常...

    Sql,oracle数据表行转列问题

    SQL行转列问题解决方案 SQL行转列问题是指将行记录转换为列记录的操作。本文将详细讲解SQL行转列问题的解决方案,并提供了一个具体的实例来帮助读者更好地理解该问题。 问题描述 假设我们有一个学生成绩表tb,...

    oracle行转列聚合函数WMSYS.WM_CONCAT

    ### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...

    Oracle 行变列实现方法

    通过oracle的管道技术实现行变列,或者复杂的SQL语句实现。 可以完成复杂逻辑在oracle中完成,减少对编程程序的依赖。

    ORACLE行转列

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

    Oracle行变列-存储过程

    Oracle数据库中的"行变列"技术是指将数据库中原本存储为多行的数据转换为单行的列式展示,这在数据分析、报表制作等场景中非常常见。存储过程是Oracle数据库中预编译的PL/SQL代码块,可以执行一系列复杂的数据库操作...

    DB2 SQL 实现行转列,列转行

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

Global site tag (gtag.js) - Google Analytics