料号 品名 产品大类 销售金额
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
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
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 行)
*/
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
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
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
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 行)
*/
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
select 料号,品名,产品大类,sum(销售金额) 销售金额
from tb
group by 料号,品名,产品大类
union all
select null,null,产品大类,sum(销售金额) 销售金额
from tb
group by 产品大类
order by 产品大类 asc,品名 desc