解决方案 »
- oracle10g sqlplus /nolog 可以登陆 其他方式不可以 sql*plus or sqlplus
- oracle物化视图建立时报错ORA-06512
- 紧急救命,误操作把sys.prop$ 里面的global_db_name修改了,不能启动
- 弱弱的问,oracle8.1.7支持集群吗?
- oracle 时间差的计算
- Oracle里有没有象SQL2000里的TOP功能???急急
- 求一字符串执行语法
- 如何从一个ORACLE数据库中将方案导入到另一个ORACLE数据库中
- 请教一个random的问题,谢谢。
- oracle redolog的切换问题 Thread 1 cannot allocate new log
- 怎样实现仿sqlserver事件探查器跟踪sql功能
- Oracle,SQL语句中/*+ */是什么技术呢?
decode(grouping(to_char(时间,'yyyy-mm')),1,to_char(时间,'yyyy-mm'),to_char(时间,'yyyy-mm'))
sum(数量)
from tt
group by rollup(商品名,销售员,单价,规格,to_char(时间,'yyyy-mm'))
--不知道满足你的要求不?WITH a AS(
SELECT 'A' 商品名,'D1' 销售员,2 数量,2 单价,'A' 规格,To_Date('2010.8.31','yyyy.mm.dd') 时间 FROM DUAL UNION ALL
SELECT 'B', 'D1', 6, 3, 'B', To_Date('2010.8.1','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'C', 'D2', 4, 4, 'C', To_Date('2010.8.6','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'B', 'D2', 2, 3, 'B', To_Date('2010.9.4','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'C', 'D3', 5, 4, 'C', To_Date('2010.8.21','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'A', 'D3', 3, 2, 'A', To_Date('2010.8.2','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'A', 'D3', 4, 2, 'A', To_Date('2010.8.14','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'E', 'D1', 3, 3, 'E', To_Date('2010.8.7','yyyy.mm.dd') FROM DUAL UNION ALL
SELECT 'E', 'D3', 5, 3, 'E', To_Date('2010.8.25','yyyy.mm.dd') FROM DUAL
)
SELECT decode(grouping(销售员),1,'总计',商品名) 商品名 ,
销售员,
Max(单价) 单价,
Max(规格) 规格,
sum(数量) 数量,
to_char(时间,'yyyy-mm') 时间
FROM a
GROUP BY rollup(to_char(时间,'yyyy-mm'),商品名,销售员) ;
结果:
商品名 销售员 单价 规格 数量 时间
------------------------------------
A D1 2 A 2 2010-08
A D3 2 A 7 2010-08
总计 2 A 9 2010-08
B D1 3 B 6 2010-08
总计 3 B 6 2010-08
C D2 4 C 4 2010-08
C D3 4 C 5 2010-08
总计 4 C 9 2010-08
E D1 3 E 3 2010-08
E D3 3 E 5 2010-08
总计 3 E 8 2010-08
总计 4 E 32 2010-08
B D2 3 B 2 2010-09
总计 3 B 2 2010-09
总计 3 B 2 2010-09
总计 4 E 34
看看这个可以不?
--创建表
create table 商品表
(
商品名 varchar(100),
销售员 varchar(100),
数量 decimal(18,2),
单价 decimal(18,2),
规格 varchar(30),
时间 varchar(50)
)
--插入
insert into 商品表 values ('A','D1',2,2,'A','2010.8.31');
insert into 商品表 values ('B','D1',6,3,'B','2010.8.1');
insert into 商品表 values ('C','D2',4,4,'C','2010.8.6');
insert into 商品表 values ('B','D2',2,3,'B','2010.9.4');
insert into 商品表 values ('C','D3',5,4,'C','2010.8.21');
insert into 商品表 values ('A','D3',3,2,'A','2010.8.2');
insert into 商品表 values ('A','D3',4,2,'A','2010.8.14');
insert into 商品表 values ('E','D1',3,3,'E','2010.8.7');
insert into 商品表 values ('E','D3',5,3,'E','2010.8.25');
--查询
select * from (
select * from (
select 商品名,销售员,sum(数量) as 数量,sum(单价) as 单价,
max(to_char(to_date(时间,'yyyy-MM-dd'),'yyyy-MM')) as 时间 from 商品表 group by 商品名,销售员 order by 商品名,销售员
)
union all
select * from (
select 商品名 ,'合计' as 销售员 , sum(数量) as 数量,sum(单价) as 单价,max(to_char(to_date(时间,'yyyy-MM-dd'),'yyyy-MM')) as 时间
from 商品表 group by 商品名 order by 商品名
)
) Temp order by 商品名,销售员
A D1 2 2 2010-08
A D3 7 4 2010-08
A 合计 9 6 2010-08
B D1 6 3 2010-08
B D2 2 3 2010-09
B 合计 8 6 2010-09
C D2 4 4 2010-08
C D3 5 4 2010-08
C 合计 9 8 2010-08
E D1 3 3 2010-08
E D3 5 3 2010-08
E 合计 8 6 2010-08
已写入 file afiedt.buf 1 WITH tb AS(
2 SELECT 'A' 商品名,'D1' 销售员,2 数量,2 单价,'A' 规格,To_Date('2010.8.31','yyyy.mm.dd') 时间
3 FROM DUAL UNION ALL
4 SELECT 'B', 'D1', 6, 3, 'B', To_Date('2010.8.1','yyyy.mm.dd') FROM DUAL UNION ALL
5 SELECT 'C', 'D2', 4, 4, 'C', To_Date('2010.8.6','yyyy.mm.dd') FROM DUAL UNION ALL
6 SELECT 'B', 'D2', 2, 3, 'B', To_Date('2010.9.4','yyyy.mm.dd') FROM DUAL UNION ALL
7 SELECT 'C', 'D3', 5, 4, 'C', To_Date('2010.8.21','yyyy.mm.dd') FROM DUAL UNION ALL
8 SELECT 'A', 'D3', 3, 2, 'A', To_Date('2010.8.2','yyyy.mm.dd') FROM DUAL UNION ALL
9 SELECT 'A', 'D3', 4, 2, 'A', To_Date('2010.8.14','yyyy.mm.dd') FROM DUAL UNION ALL
10 SELECT 'E', 'D1', 3, 3, 'E', To_Date('2010.8.7','yyyy.mm.dd') FROM DUAL UNION ALL
11 SELECT 'E', 'D3', 5, 3, 'E', To_Date('2010.8.25','yyyy.mm.dd') FROM DUAL
12 )
13 select 商品名,销售员,时间,单价,规格,数量汇总
14 from
15 (select 商品名,nvl(销售员,商品名||'总计') 销售员,to_char(时间,'yyyymm') 时间,
16 grouping(to_char(时间,'yyyymm')) sj,
17 grouping(销售员) pm,
18 max(单价) 单价,max(规格) 规格,sum(数量) 数量汇总
19 from tb
20 group by rollup(商品名,to_char(时间,'yyyymm'),销售员))
21* where (sj,pm) in((0,0),(0,1))
SQL> / 销售 时间 单价 数量汇总
- ----- ------ ---------- - ----------
A D1 201008 2 A 2
A D3 201008 2 A 7
A A总计 201008 2 A 9
B D1 201008 3 B 6
B B总计 201008 3 B 6
B D2 201009 3 B 2
B B总计 201009 3 B 2
C D2 201008 4 C 4
C D3 201008 4 C 5
C C总计 201008 4 C 9
E D1 201008 3 E 3 销售 时间 单价 数量汇总
- ----- ------ ---------- - ----------
E D3 201008 3 E 5
E E总计 201008 3 E 8已选择13行。
销售员,
Max(单价) 单价,
Max(规格) 规格,
sum(数量) 数量,
to_char(时间,'yyyy-mm') 时间
FROM a
GROUP BY 商品名,rollup(销售员),to_char(时间,'yyyy-mm') ;
--创建表
create table 商品表
(
商品名 varchar(100),
销售员 varchar(100),
数量 decimal(18,2),
单价 decimal(18,2),
规格 varchar(30),
时间 varchar(50)
)
select * from 商品表 where 商品名 like '%';
--插入
insert into 商品表 values ('A','D1',2,2,'A','2010.8.31');
insert into 商品表 values ('B','D1',6,3,'B','2010.8.1');
insert into 商品表 values ('C','D2',4,4,'C','2010.8.6');
insert into 商品表 values ('B','D2',2,3,'B','2010.9.4');
insert into 商品表 values ('C','D3',5,4,'C','2010.8.21');
insert into 商品表 values ('A','D3',3,2,'A','2010.8.2');
insert into 商品表 values ('A','D3',4,2,'A','2010.8.14');
insert into 商品表 values ('E','D1',3,3,'E','2010.8.7');
insert into 商品表 values ('E','D3',5,3,'E','2010.8.25');
insert into 商品表 values ('','D3',5,3,'E','2010.8.25');
--查询
select *
from (select *
from (select 商品名,
销售员,
sum(数量) as 数量,
sum(单价) as 单价,
max(to_char(to_date(时间, 'yyyy-MM-dd'), 'yyyy-MM')) as 时间
from 商品表
group by 商品名, 销售员
order by 商品名, 销售员)
union all
select *
from (select 商品名,
'合计' as 销售员,
sum(数量) as 数量,
sum(单价) as 单价,
max(to_char(to_date(时间, 'yyyy-MM-dd'), 'yyyy-MM')) as 时间
from 商品表
group by 商品名
order by 商品名)) Temp
order by 商品名, 销售员
--
商品名 销售员 数量 单价 时间
A D1 2 2 Aug-10
A D3 7 4 Aug-10
A 合计 9 6 Aug-10
B D1 6 3 Aug-10
B D2 2 3 Sep-10
B 合计 8 6 Sep-10
C D2 4 4 Aug-10
C D3 5 4 Aug-10
C 合计 9 8 Aug-10
E D1 3 3 Aug-10
E D3 5 3 Aug-10
E 合计 8 6 Aug-10
D3 5 3 Aug-10
合计 5 3 Aug-10