- 爱易网页
-
MSSQL教程
- SQL两次分组有关问题请问
日期: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 销售金额