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

Oracle 行转列总结 Case When,Decode,PIVOT 三种方式

阅读更多
最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式

--=========建表语句

CREATE TABLE populations(
country VARCHAR2(20),
sex INT,
populcation INT
);

--=========插入记录

insert into populations (COUNTRY, SEX, POPULCATION)
values ('中国  ', 1, 340);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('中国  ', 2, 260);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('美国  ', 1, 45);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('美国  ', 2, 55);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('加拿大', 1, 51);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('加拿大', 2, 49);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('英国  ', 1, 40);

insert into populations (COUNTRY, SEX, POPULCATION)
values ('英国  ', 2, 60);

commit;

--=========三种方式

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

Decode 方式

SELECT a.COUNTRY AS "国家",
   SUM(DECODE(a.SEX, 1, a.POPULCATION)) AS "男",
   SUM(DECODE(a.SEX, 2, a.POPULCATION)) AS "女"
  FROM populations a
GROUP BY a.COUNTRY

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

Case When 方式

SELECT a.COUNTRY AS "国家",
   SUM(CASE
WHEN a.SEX = 1 THEN
  a.POPULCATION
   END) AS "男",
   SUM(CASE
WHEN a.SEX = 2 THEN
  a.POPULCATION
   END) AS "女"
  FROM populations a
GROUP BY a.COUNTRY

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

PIVOT 方式 11G特有的方式

SELECT *
  FROM (SELECT a.COUNTRY AS "国家", a.SEX, a.POPULCATION FROM populations a)
  PIVOT(
SUM(POPULCATION)
FOR SEX IN(1 AS "男",2 AS "女"))

分享到:
评论

相关推荐

    ORACLE 列转行 DECODE函数用法

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

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

    总结来说,Oracle的行转列和列转行操作主要依赖于SQL的内置功能,如CASE语句、DECODE函数和UNION ALL,以及在动态SQL中的条件构建。理解并熟练运用这些技巧,可以帮助数据库管理员更好地处理和展示复杂的数据结构。

    oracle数据行列转换

    1. 行转列:在Oracle 10g中,我们常用的是DECODE函数和CASE语句结合使用来实现简单的行转列。DECODE函数可以用来根据特定条件返回不同的值,而CASE语句则允许更复杂的逻辑判断。例如,我们可以为每个月的销售额创建...

    orcale数据库 行列互换

    在Oracle中,可以使用SQL的CASE语句或者DECODE函数来实现行转列。例如,在提供的描述中,我们看到一个例子是将学生的语文和数学分数从行转换为了列。 ```sql SELECT student AS '姓名', SUM(CASE name WHEN '语文'...

    oracle sql 行列转换

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

    Oracle 数据显示 横表转纵表

    Oracle数据库提供了多种方法来实现这种转换,其中一种常见的方式是使用DECODE函数或者CASE语句。本文将详细介绍如何在Oracle中使用DECODE和CASE语句进行横表转纵表的操作。 首先,我们需要理解横表和纵表的概念。横...

    [数据库] SQL查询语句表行列转换及一行数据转换成两列1

    在Oracle数据库中,可以使用`PIVOT`关键字将行转换为列,但不是所有数据库系统都支持。在不支持`PIVOT`的情况下,可以使用`GROUP BY`和`CASE WHEN`结合`UNION ALL`来实现类似效果。不过,这通常需要对原始数据结构有...

    行列转,换行列转换

    1. **CASE WHEN 语句**:通过CASE WHEN结构来判断条件,进而实现列值的变化。 2. **PIVOT 函数**:部分数据库系统支持PIVOT函数,可以直接实现行列转换。 3. **DECODE 函数**:类似于CASE WHEN,但使用更为简洁。 4....

Global site tag (gtag.js) - Google Analytics