SQL两次分组问题请教

时间:2022-09-16 12:47:51
我的数据库包含如下字段:
料号 品名 产品大类 销售金额 
001  001-1 1001    2000
002  002-1 1001    3000
003  003-1 2001    4000
004  004-1 2001    5000
005  005-1 1001    1000
001  001-1 1001    2000
003  003-1 2001    4000

等等

现在想通过分组 得到 

料号 品名  产品大类  销售总额
001  001-1  1001     4000   ( 即料号001的 销售金额汇总)
002  002-1  1001     3000
005  005-1  1001     1000
分组 1001           总计 8000

料号 品名  产品大类  销售总额
003  003-1 2001       8000
004  004-1 2001       5000
分组 2001           总计 13000

请问用SQL 如何做查询语句? 怎么写 SQL的存储过程?

谢谢!
      


6 个解决方案

#1


救命啊!!!!!!!!!!

#2


select 料号,品名,产品大类,sum(销售金额) as 销售金额 
from tb 
group by 料号,品名,产品大类
with rollup

#3


create table #t (料号 varchar(100), 品名 varchar(100), 产品大类 varchar(100), 销售金额 int)
insert into #t
select '001','001-1', 1001,    2000 union all
select '002','002-1', 1001,    3000 union all
select '003','003-1', 2001,    4000 union all
select '004','004-1', 2001,    5000 union all
select '005','005-1', 1001,    1000 union all
select '001','001-1', 1001,    2000 union all
select '003','003-1', 2001,    4000

select *
from (
    select 料号,品名,产品大类,sum(销售金额) as 销售总额
    from #t
    group by 料号,品名,产品大类

    union all

    select '分组' as 料号,'总计' as 品名,产品大类,sum(销售金额) as 总计
    from #t
    group by 产品大类) tt

order by 产品大类,料号


drop table #t

#4


if object_id('pubs..tb') is not null
   drop table tb
go

create table tb(料号 varchar(10),品名 varchar(10),产品大类 varchar(10),销售金额 int)
insert into tb(料号,品名,产品大类,销售金额) values('001',  '001-1', '1001',    2000)
insert into tb(料号,品名,产品大类,销售金额) values('002',  '002-1', '1001',    3000)
insert into tb(料号,品名,产品大类,销售金额) values('003',  '003-1', '2001',    4000)
insert into tb(料号,品名,产品大类,销售金额) values('004',  '004-1', '2001',    5000)
insert into tb(料号,品名,产品大类,销售金额) values('005',  '005-1', '1001',    1000)
insert into tb(料号,品名,产品大类,销售金额) values('001',  '001-1', '1001',    2000)
insert into tb(料号,品名,产品大类,销售金额) values('003',  '003-1', '2001',    4000)

select isnull(料号,'总计') 料号, isnull(品名,'小计') 品名,isnull(产品大类,'小计') 产品大类,sum(销售金额) as 销售金额 
from tb 
group by 料号,品名,产品大类
with rollup

drop table tb

/*
料号       品名       产品大类   销售金额        
---------- ---------- ---------- ----------- 
001        001-1      1001       4000
001        001-1      小计       4000
001        小计       小计       4000
002        002-1      1001       3000
002        002-1      小计       3000
002        小计       小计       3000
003        003-1      2001       8000
003        003-1      小计       8000
003        小计       小计       8000
004        004-1      2001       5000
004        004-1      小计       5000
004        小计       小计       5000
005        005-1      1001       1000
005        005-1      小计       1000
005        小计       小计       1000
总计       小计       小计       21000

(所影响的行数为 16 行)

*/

#5


谢谢谢谢,虽然没怎么看明白。

#6


--找个笨方法试试,呵呵
select 料号,品名,产品大类,sum(销售金额) 销售金额
from tb
group by 料号,品名,产品大类

union all

select null,null,产品大类,sum(销售金额) 销售金额
from tb
group by 产品大类
order by 产品大类 asc,品名 desc

#1


救命啊!!!!!!!!!!

#2


select 料号,品名,产品大类,sum(销售金额) as 销售金额 
from tb 
group by 料号,品名,产品大类
with rollup

#3


create table #t (料号 varchar(100), 品名 varchar(100), 产品大类 varchar(100), 销售金额 int)
insert into #t
select '001','001-1', 1001,    2000 union all
select '002','002-1', 1001,    3000 union all
select '003','003-1', 2001,    4000 union all
select '004','004-1', 2001,    5000 union all
select '005','005-1', 1001,    1000 union all
select '001','001-1', 1001,    2000 union all
select '003','003-1', 2001,    4000

select *
from (
    select 料号,品名,产品大类,sum(销售金额) as 销售总额
    from #t
    group by 料号,品名,产品大类

    union all

    select '分组' as 料号,'总计' as 品名,产品大类,sum(销售金额) as 总计
    from #t
    group by 产品大类) tt

order by 产品大类,料号


drop table #t

#4


if object_id('pubs..tb') is not null
   drop table tb
go

create table tb(料号 varchar(10),品名 varchar(10),产品大类 varchar(10),销售金额 int)
insert into tb(料号,品名,产品大类,销售金额) values('001',  '001-1', '1001',    2000)
insert into tb(料号,品名,产品大类,销售金额) values('002',  '002-1', '1001',    3000)
insert into tb(料号,品名,产品大类,销售金额) values('003',  '003-1', '2001',    4000)
insert into tb(料号,品名,产品大类,销售金额) values('004',  '004-1', '2001',    5000)
insert into tb(料号,品名,产品大类,销售金额) values('005',  '005-1', '1001',    1000)
insert into tb(料号,品名,产品大类,销售金额) values('001',  '001-1', '1001',    2000)
insert into tb(料号,品名,产品大类,销售金额) values('003',  '003-1', '2001',    4000)

select isnull(料号,'总计') 料号, isnull(品名,'小计') 品名,isnull(产品大类,'小计') 产品大类,sum(销售金额) as 销售金额 
from tb 
group by 料号,品名,产品大类
with rollup

drop table tb

/*
料号       品名       产品大类   销售金额        
---------- ---------- ---------- ----------- 
001        001-1      1001       4000
001        001-1      小计       4000
001        小计       小计       4000
002        002-1      1001       3000
002        002-1      小计       3000
002        小计       小计       3000
003        003-1      2001       8000
003        003-1      小计       8000
003        小计       小计       8000
004        004-1      2001       5000
004        004-1      小计       5000
004        小计       小计       5000
005        005-1      1001       1000
005        005-1      小计       1000
005        小计       小计       1000
总计       小计       小计       21000

(所影响的行数为 16 行)

*/

#5


谢谢谢谢,虽然没怎么看明白。

#6


--找个笨方法试试,呵呵
select 料号,品名,产品大类,sum(销售金额) 销售金额
from tb
group by 料号,品名,产品大类

union all

select null,null,产品大类,sum(销售金额) 销售金额
from tb
group by 产品大类
order by 产品大类 asc,品名 desc