最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"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行转列 Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列...
NULL 博文链接:https://lisanlai.iteye.com/blog/793404
详细讲解了case、when的用法.ASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。
网络上流传了很多将行数据转换称列数据的方法和应用实例,一般通过decode或者case函数与聚合函数联合实现功能,这里就不再重复。 日前本人在一个偶然的应用中用到了一个需要将列数据转换为行数据的问题。搜索了很久...
本文讲述了Oracle-Decode()函数和CASE语句的比较。
主要介绍了Oracle用decode函数或CASE-WHEN实现自定义排序功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
关于oracle decode函数的用法
Oracle中Decode()函数使用技巧Oracle中Decode()函数使用技巧Oracle中Decode()函数使用技巧
DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。
博客:PostgreSQL的学习心得和知识总结(四十四)|语法级自上而下完美实现Oracle数据库DECODE函数的实现方案(GreenPlum & AntDB)
Oracle中Decode()函数的有关用法Oracle中Decode()函数的有关用法
NULL 博文链接:https://hcty31.iteye.com/blog/1119556
Oracle中Decode()函数使用技巧
oracle中decode()函数使用技巧 很有帮助的哦
行转列是指将数据库表中的多行转换为一列。这种操作可以使用 AGGREGATE FUNCTION 语句来实现。 示例代码: ```sql SELECT id, MAX(decode(cn, 'c1', cv, NULL)) AS c1, MAX(decode(cn, 'c2', cv, NULL)) AS c2, ...
列举oracle中nvl、decode、trim、rtrim的常见用法
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ...
但是在遇到需要组合条件进行统计时,有时却不如case when 或者另建视图好用。 可是有时就想用DECODE,咋办? 这里给大家介绍一下DECODE如何实现组合条件查询,一句SQL查询一张中国式报表。 (本文的示例,在实际业务...