Oracle中用一句SQL语句实现行列转换
2009-09-21 12:15
381 查看
SQL*PLus> desc emp;
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL*PLus> select job, deptno, count(*)
2 from emp
3 group by job, deptno;
JOB DEPTNO COUNT(*)
--------- ---------- ----------
CLERK 10 2
CLERK 20 4
CLERK 30 2
ANALYST 20 4
MANAGER 10 2
MANAGER 20 2
MANAGER 30 2
SALESMAN 30 8
PRESIDENT 10 2
已选择9行。
SQL*PLus> select job,
2 max( decode( deptno, 10, cnt, null ) ) dept_10,
3 max( decode( deptno, 20, cnt, null ) ) dept_20,
4 max( decode( deptno, 30, cnt, null ) ) dept_30,
5 max( decode( deptno, 40, cnt, null ) ) dept_40
6 from ( select job, deptno, count(*) cnt
7 from emp
8 group by job, deptno )
9 group by job
10 /
JOB DEPT_10 DEPT_20 DEPT_30 DEPT_40
--------- ---------- ---------- ---------- ----------
ANALYST 4
CLERK 2 4 2
MANAGER 2 2 2
PRESIDENT 2
SALESMAN 8
-----------------------------------------------------------------------------------
各位,我有如下一个工资表,如:
姓名 工资项 工资
张三 基本工资 1000
张三 岗位工资 2000
张三 效益工资 200
李四 基本工资 1000
李四 效益工资 1000
.......
我需要用一个SQL语句得到如下所示的结果:
姓名 基本工资 岗位工资 效益工资 .....
张三 1000 2000 200 .....
李四 1000 0 1000 .....
....
select 姓名, sum(decode(工资项,'基本工资',工资,0)) 基本工资,
sum(decode(工资项,'岗位工资',工资,0)) 岗位工资, ....
from yourtable
group by 姓名
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL*PLus> select job, deptno, count(*)
2 from emp
3 group by job, deptno;
JOB DEPTNO COUNT(*)
--------- ---------- ----------
CLERK 10 2
CLERK 20 4
CLERK 30 2
ANALYST 20 4
MANAGER 10 2
MANAGER 20 2
MANAGER 30 2
SALESMAN 30 8
PRESIDENT 10 2
已选择9行。
SQL*PLus> select job,
2 max( decode( deptno, 10, cnt, null ) ) dept_10,
3 max( decode( deptno, 20, cnt, null ) ) dept_20,
4 max( decode( deptno, 30, cnt, null ) ) dept_30,
5 max( decode( deptno, 40, cnt, null ) ) dept_40
6 from ( select job, deptno, count(*) cnt
7 from emp
8 group by job, deptno )
9 group by job
10 /
JOB DEPT_10 DEPT_20 DEPT_30 DEPT_40
--------- ---------- ---------- ---------- ----------
ANALYST 4
CLERK 2 4 2
MANAGER 2 2 2
PRESIDENT 2
SALESMAN 8
-----------------------------------------------------------------------------------
各位,我有如下一个工资表,如:
姓名 工资项 工资
张三 基本工资 1000
张三 岗位工资 2000
张三 效益工资 200
李四 基本工资 1000
李四 效益工资 1000
.......
我需要用一个SQL语句得到如下所示的结果:
姓名 基本工资 岗位工资 效益工资 .....
张三 1000 2000 200 .....
李四 1000 0 1000 .....
....
select 姓名, sum(decode(工资项,'基本工资',工资,0)) 基本工资,
sum(decode(工资项,'岗位工资',工资,0)) 岗位工资, ....
from yourtable
group by 姓名
相关文章推荐
- sql语句实现按某字段分组并按另一字段排名(oracle)
- Oracle实现查询时间段的Sql语句两法
- 整理的oracle实现的基础sql语句查询
- 在ORACLE中使用SQL语句实现排列组合
- Oracle 查看表空间的大小及使用情况sql语句和oracle增加表空间大小两种实现方法
- Oracle建表SQL语句实现id自增
- 如何用SQL语句实现行列转换
- 给定一个一oracle建表的sql语句,解析读出的字符串,将表名、字段名、字段类型数据取出,怎么实现啊?
- 使用标准SQL语句实现分页操作(Oracle)
- SQL语句实现行列转换
- Oracle SQL语句实现版本化管理
- Oracle SQL语句实现数字四舍五入取整
- oracle sql语句实现累加、累减、累乘、累除
- java代码实现oracle sql语句转mysql sql语句
- Oracle创建主键自增表(sql语句实现)及触发器应用
- Oracle中用SQL语句实现进制间互相转换
- ORACLE中一个SQL语句实现横向汇总和纵向汇总(求每个学生的总成绩,每学科总成绩和全班总成绩)
- Oracle中实现分页的sql语句
- sqlserver/mysql/oracle实现sql语句分页方法