Oracle 11g pivot行转列

之前写过一篇行转列的文章:Oracle 简单的列转行

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

需求是,统计每个部门不同工种的薪水总和。

SQL> select deptno,ename,job,sal from emp;

DEPTNO ENAME      JOB              SAL

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

20 SMITH      CLERK            800

30 ALLEN      SALESMAN        1600

30 WARD       SALESMAN        1250

20 JONES      MANAGER         2975

30 MARTIN     SALESMAN        1250

30 BLAKE      MANAGER         2850

10 CLARK      MANAGER         2450

20 SCOTT      ANALYST         3000

10 KING       PRESIDENT       5000

30 TURNER     SALESMAN        1500

20 ADAMS      CLERK           1100

30 JAMES      CLERK            950

20 FORD       ANALYST         3000

10 MILLER     CLERK           1300

已选择14行。

SQL> select deptno,

nvl(sum(decode(job, ‘MANAGER‘, sal)), 0) "s_MANAGER",

nvl(sum(decode(job, ‘ANALYST‘, sal)), 0) "s_ANALYST",

nvl(sum(decode(job, ‘CLERK‘, sal)), 0) "s_CLERK",

nvl(sum(decode(job, ‘PRESIDENT‘, sal)), 0) "s_PRESIDENT",

nvl(sum(decode(job, ‘SALESMAN‘, sal)), 0) "s_SALESMAN"

from emp

group by deptno;

DEPTNO  s_MANAGER  s_ANALYST    s_CLERK s_PRESIDENT s_SALESMAN

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

30       2850          0        950           0       5600

20       2975       6000       1900           0          0

10       2450          0       1300        5000          0

用pivot会更简洁

SQL>  with p as (select deptno,job,sal from emp)

SELECT * FROM p  pivot ( SUM(sal)

FOR job  IN (‘MANAGER‘ as "s_MANAGER",

‘ANALYST‘ as "s_ANALYST",

‘CLERK‘ as "s_CLERK",

‘PRESIDENT‘ as  "s_PRESIDENT",

‘SALESMAN‘ as "s_SALESMAN" ));

DEPTNO  s_MANAGER  s_ANALYST    s_CLERK s_PRESIDENT s_SALESMAN

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

30       2850                   950                   5600

20       2975       6000       1900

10       2450                  1300        5000

时间: 2024-08-06 04:08:23

Oracle 11g pivot行转列的相关文章

Pivot 行转列用法

源视图: 使用 Pivot 行转列进行处理: 语句如下: select m.*,a.A as AccountA,a.B as AccountB,a.C as AccountC,a.D as AccountD,a.E as AccountE,a.F as AccountF,a.G as AccountG from     (select TypeCode,Account,MainCode from Sale_AdvanceType) p     pivot    (        max(Acco

SQL Server中使用PIVOT行转列

1.建表及插入数据 1 USE [AdventureDB] 2 GO 3 /****** Object: Table [dbo].[Score] Script Date: 11/25/2016 4:30:50 PM ******/ 4 SET ANSI_NULLS ON 5 GO 6 7 SET QUOTED_IDENTIFIER ON 8 GO 9 10 CREATE TABLE [dbo].[Score]([Name] [varchar](50) NULL,[Subject] [varcha

sqlserver报表统计——参数化动态PIVOT行转列

先列出所有表结构: --title 报表 --table 实收水费:hx_t_received --字段 收费部门id:hx_fdepartmentid 1.收费部门名称:hx_fdepartmentname 应收水费信息ID:hx_freceivableid --收费类别:hx_ftype (水费(1):再分[开户(table) 供水类别:自来水(100000001)==水费,中水(100000002)==中水费],代理费(2)==污水处理费) --实收金额:hx_freceivedamoun

SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

原文:SQL Server 2008 R2--PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于学术性引用. 未经作者同意请勿用于商业出版.商业印刷.商业引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文

Oracle 11g Pivot函数实现行转列

先上语法规范: SELECT .... FROM <table-expr> PIVOT ( aggregate-function(<column>) FOR <pivot-column> IN (<value1>, <value2>,..., <valuen>) ) AS <alias> WHERE ..... 通过一个例子说明其用法: select * from (select salary, department_id

Oracle 11g新特性虚拟列分区

现在有个需求:一个单据表要按照月份来分区,如果是在Oracle 10g上,只能再加一个字段.在Oracle 11g以后就不一样了,可以用虚拟列处理. SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Sqlserver中PIVOT行转列透视操作

创建表: IF OBJECT_ID('T040_PRODUCT_SALES') IS NOT NULL DROP TABLE T040_PRODUCT_SALES create table T040_PRODUCT_SALES ( ID INT IDENTITY(1,1), ProductName VARCHAR(20), SaleMonth INT, SalesCount INT ) 插入数据并排序: INSERT INTO T040_PRODUCT_SALES VALUES ('Bicycl

SQL SERVER PIVOT 行转列、列传行

在数据库操作中,有些时候我们遇到需要实现"行转列"的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我们先插入一些模拟数据: INSERT INTO WEEK_INCOME SELECT '星期一',1000 UNION ALL SELECT '星期二',2000 UNION ALL SELECT '星期三',3000 UNION ALL SELECT '星期四',4000 UNION ALL SE

Oracle根据【日期】组,其他条件根据PIVOT行转列。使每个日期条件关联的其他数据只有一行。

select OPER_TIME, MICROPAY, REFUND from ( select trunc(oper_time) oper_time, class_name, sum(total_fee) total_fee from wx_pay_detail group by trunc(oper_time),class_name ) pivot(sum(total_fee) for class_name in ('MicroPay'as "MICROPAY",'Refund'