最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"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 "女"))
分享到:
相关推荐
在实际工作中,你可能还需要结合其他SQL函数,如CASE WHEN或NVL,来进一步增强DECODE的功能。例如,当你需要处理可能的NULL值时,NVL函数可以提供一个默认值,防止因NULL而导致的结果异常。 总之,Oracle的DECODE...
总结来说,Oracle的行转列和列转行操作主要依赖于SQL的内置功能,如CASE语句、DECODE函数和UNION ALL,以及在动态SQL中的条件构建。理解并熟练运用这些技巧,可以帮助数据库管理员更好地处理和展示复杂的数据结构。
1. 行转列:在Oracle 10g中,我们常用的是DECODE函数和CASE语句结合使用来实现简单的行转列。DECODE函数可以用来根据特定条件返回不同的值,而CASE语句则允许更复杂的逻辑判断。例如,我们可以为每个月的销售额创建...
在Oracle中,可以使用SQL的CASE语句或者DECODE函数来实现行转列。例如,在提供的描述中,我们看到一个例子是将学生的语文和数学分数从行转换为了列。 ```sql SELECT student AS '姓名', SUM(CASE name WHEN '语文'...
在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...
Oracle数据库提供了多种方法来实现这种转换,其中一种常见的方式是使用DECODE函数或者CASE语句。本文将详细介绍如何在Oracle中使用DECODE和CASE语句进行横表转纵表的操作。 首先,我们需要理解横表和纵表的概念。横...
在Oracle数据库中,可以使用`PIVOT`关键字将行转换为列,但不是所有数据库系统都支持。在不支持`PIVOT`的情况下,可以使用`GROUP BY`和`CASE WHEN`结合`UNION ALL`来实现类似效果。不过,这通常需要对原始数据结构有...
1. **CASE WHEN 语句**:通过CASE WHEN结构来判断条件,进而实现列值的变化。 2. **PIVOT 函数**:部分数据库系统支持PIVOT函数,可以直接实现行列转换。 3. **DECODE 函数**:类似于CASE WHEN,但使用更为简洁。 4....