`
albb0608
  • 浏览: 63878 次
  • 性别: 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动态行转列

    其中,“行转列”(Pivot)是一种常见的数据转换需求,尤其在数据分析和报告生成时尤为重要。本文将深入探讨如何通过Oracle中的存储过程实现动态“行转列”,并结合给定文件的信息,详细解析其工作原理、优点及应用...

    oracle行转列oracle行转列

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

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

    本文将详细介绍几种在Oracle数据库中实现行转列的经典方法,并通过具体示例来展示这些方法的应用。 #### 一、使用SQL decode函数进行行转列 ##### 1. 实现思路 通过使用`decode`函数结合`sum`聚合函数可以实现行...

    oracle 行转列

    其中,“行转列”是一种常见的数据处理方式,它指的是将原本存储在多行中的数据转化为单行中的多个字段。这种数据转换方式在报表生成、数据分析等领域非常有用。 #### 二、固定列数的行转列方法 当待转换的列是...

    ORACLE 列转行 DECODE函数用法

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

    Oracle行转列

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

    decode函数与case when 的妙用

    在数据库管理和SQL编程中,`DECODE`函数和`CASE WHEN`语句是两种非常重要的逻辑判断工具,它们常用于处理条件分支和数据转换。在这篇文章中,我们将深入探讨这两种方法的用途、区别以及如何巧妙地运用它们。 首先,...

    Oracle_case_when_用法

    在 Oracle 数据库中,`CASE WHEN` 表达式提供了一种在 SQL 查询中实现条件判断的方法,这使得开发人员能够在不使用 PL/SQL 的情况下编写更为灵活和复杂的查询语句。`CASE WHEN` 与 `DECODE()` 函数相似,但因其符合 ...

    Oracle的列转行问题

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

    Oracle-Decode()函数和CASE语句的比较

    Oracle数据库中的`Decode()`函数和`CASE`语句都是用于条件判断和数据转换的重要工具,它们各有特点,适用场景也有所不同。以下是对这两个功能的详细比较。 首先,`Decode()`函数是一个简化的条件表达式,它允许你在...

    Oracle用decode函数或CASE-WHEN实现自定义排序

    `CASE-WHEN`语句则提供了一种更灵活的条件表达方式,可以处理更复杂的逻辑。在自定义排序中,`CASE-WHEN`可以这样使用: ```sql SELECT * FROM table_date ORDER BY ( CASE DateStr WHEN 'Monday' THEN 1 WHEN '...

    关于oracle decode函数的用法

    Oracle的DECODE函数是一种条件表达式,用于在SQL语句中执行类似于IF...THEN...ELSE逻辑判断的功能。它根据一个指定的表达式的值,与一系列的条件进行比较,如果匹配到某个条件,则返回对应的值;如果没有匹配任何...

    oracle的列转行问题

    在 Oracle 中,通常使用 decode 或者 case 函数与聚合函数联合实现列转行功能。但是,这种方法存在一些缺陷,例如性能问题和数据重复访问问题。在本文中,我们将介绍一种新的解决方案,来解决 Oracle 列转行问题。 ...

    oracle case when 语句的用法详解

    综上所述,Oracle的CASE WHEN语句是数据库查询中处理条件分支的重要工具,可以在SELECT、WHERE和GROUP BY等不同场景中使用,提供了一种灵活的方式来构造复杂的逻辑判断。了解并熟练运用CASE WHEN,能够显著提升SQL...

    Oracle实现行转换成列的方法

    除了`DECODE`函数,Oracle还提供了`PIVOT`操作,它是一种更为灵活的行转列方法。例如,如果我们有更多的科目,使用`PIVOT`可能会更方便: ```sql SELECT * FROM ( SELECT s.id, s.name, s.age, c.classname, s....

    Oracle中Decode()函数使用技巧

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

    Oracle行变列-存储过程

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

Global site tag (gtag.js) - Google Analytics