最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"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 行转列总结 Case When,Decode,PIVOT 三种方式 - 转的更多相关文章

  1. 命令行运行Python脚本时传入参数的三种方式

    原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...

  2. oracle 行转列~列转行(几种方法)

    工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...

  3. Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...

  4. oracle 行转列 分析函数

    oracle 行转列 首先看一下源数据: 方法一:WM_CONCAT group by 这个方法没有问题. SELECT CODE_TS, WMSYS.WM_CONCAT(S_NUM + || ':' ...

  5. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

  6. oracle行转列实现

    1.新建测试表 create table TEST_TABLE( T1 VARCHAR2(10),--姓名 T2 VARCHAR2(10),--科目 T3 VARCHAR2(10)--成绩 ) 2.插 ...

  7. oracle数据的导入导出(两种方法三种方式)

    大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1. ...

  8. Oracle行转列操作

    有时候我们在展示表中数据的时候,需要将行转为列来显示,如以下形式: 原表结构展示如下:---------------------------产品名称    销售额     季度------------ ...

  9. Oracle行转列/列转行

    1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual u ...

随机推荐

  1. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  2. [BTS] BizTalk host BizTalkServerApplication throttled because DatabaseSize exceeded the configured throttling limit.

    Log Name: ApplicationSource: BizTalk ServerDate: 7/22/2013 6:10:38 PMEvent ID: 7001Task Category: Bi ...

  3. 安装 Dubbo 管理控制台

    Dubbo管控台可以对注册到 zookeeper 注册中心的服务或服务消费者进行管理,但管控台是否正常对Dubbo服务没有影响,管控台也不需要高可用,因此可以单节点部署. IP: 192.168.1. ...

  4. 投票系统开发总结struts2,jfreechart,cookie应用,以及前端技术

    struts2配置web.xml+struts.xml: <?xml version="1.0" encoding="UTF-8"?> <we ...

  5. 安装完grunt和grunt-cli仍然无法识别grunt

    如题: 在安装完grunt-cli和grunt之后,仍然不识别grunt. 反复确认是-g安装... 原因: 有可能是nodejs安装出现问题,到时npm的路径没有出现在环境变量里面. 把C:\Use ...

  6. C语言实现快速排序

    我觉得冒泡排序是比较简单的: 所以今天我们实现一个叫做快速排序的: Problem 你想要将(4,3,5,1,2)排序成(1,2,3,4,5) 你决定使用最简单的快速排序: Solution 首先,打 ...

  7. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  8. Maven学习总结(一副本)——Maven配置和搭建

    环境准备: JDK 1.6 Maven 3.0.4 myeclipse 8.6.1 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版 ...

  9. ffmpeg mp3 to m3u8

    ffmpeg -i Sunshine.mp3 -c:a libmp3lame -b:a 128k -map 0:0 -f segment -segment_time 10 -segment_list ...

  10. C#窗体全屏功能

    最近有朋友让我给他弄个应用程序全屏的功能,例如银行的取号程序界面.所以我从网上查询了一些实现的方法. C#应用程序中如何实现全屏幕显示功能? 效果就像windows自带的屏幕保护程序和众多的游戏那样, ...