首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求oracle 归类汇总查询sql语句

2013-02-19 
求oracle 分类汇总查询sql语句本帖最后由 hh371011618 于 2010-09-15 20:41:16 编辑oracle 数据库 表table

求oracle 分类汇总查询sql语句
本帖最后由 hh371011618 于 2010-09-15 20:41:16 编辑 oracle 数据库 表table (表只是取部分,其它的省略掉了,下表的商品名没有按顺序排)如:
商品名销售员数量单价规格时间
AD122 A2010.8.31
BD163 B2010.8.1
CD244 C2010.8.6
BD223 B2010.9.4
CD354 C2010.8.21
AD332 A2010.8.2
AD342 A2010.8.14
ED133 E2010.8.7
ED353 E2010.8.25

我想汇总成如下:
商品名销售员数量单价规格时间
AD122 A2010.8
AD372 A2010.8
总计92010.8
BD163 B2010.8
总计62010.8
CD244 C2010.8
CD354 C2010.8
总计92010.8

如何写sql语句,谢谢了
[解决办法]


--不知道满足你的要求不?

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 商品名,销售员

[解决办法]
引用:
oracle 数据库 表table (表只是取部分,其它的省略掉了,下表的商品名没有按顺序排)如:
商品名 销售员 数量 单价 规格 时间
A D1 2 2 A 2010.8.31
B D1 6 3 B 2010.8.1
C D2 4 4 C 2010.8.6
B D2 2 3 B 2010.9.4
C D3 5 4 C 2010.8.21
A D3 3 2 A 2010.8.2
……



SQL> edi
已写入 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行。









[解决办法]

--创建表
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 商品名, 销售员
--
商品名销售员数量单价时间
AD122Aug-10
AD374Aug-10
A合计96Aug-10
BD163Aug-10
BD223Sep-10
B合计86Sep-10
CD244Aug-10
CD354Aug-10
C合计98Aug-10
ED133Aug-10
ED353Aug-10
E合计86Aug-10
D353Aug-10
合计53Aug-10

热点排行