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

SQL两次分组有关问题请问

2012-03-26 
SQL两次分组问题请教我的数据库包含如下字段:料号品名产品大类销售金额001001-110012000002002-1100130000

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 销售金额
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 行)

*/

热点排行