日期:2014-05-19  浏览次数:20713 次

SQL两次分组问题请教
我的数据库包含如下字段:
料号   品名   产品大类   销售金额  
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的存储过程?

谢谢!
           




------解决方案--------------------
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

------解决方案--------------------
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 销售金额