有一个三个表,结构如下
goodlist(商品目录表)
goodid 类别 编码 名称 规格out(销售表)
outid goodid deparid 数量 单价 金额 成本 日期depar(部门列表)
deparid name现想得到一个某段日期的汇总表
要求按部门和商品类别去汇总销售表中的金额和成本
goodlist(商品目录表)
goodid 类别 编码 名称 规格out(销售表)
outid goodid deparid 数量 单价 金额 成本 日期depar(部门列表)
deparid name现想得到一个某段日期的汇总表
要求按部门和商品类别去汇总销售表中的金额和成本
b.name as 部门,
c.类别,
sum(金额) as 金额,
sum(成本) as 成本
from
[out] a
join
depar b on a.deparid=b.deparid
join
goodlist c on c.goodid=a.goodid
where
日期 between '开始日期' and '结束日期'group by b.name as 部门, c.类别
b.name as 部门,
c.类别,
sum(金额) as 金额,
sum(成本) as 成本
from
[out] a
join
depar b on a.deparid=b.deparid
join
goodlist c on c.goodid=a.goodid
where
日期 between '开始日期' and '结束日期'group by b.name , c.类别
g.类别 as 商品类别,
sum(o.金额) as 金额,
sum(o.成本) as 成本
from goodlist g,depar d,[out] o
where o.goodid=g.goodid
and o.deparid=d.deparid
and o.日期 between 起始日期 and 终止日期
group by d.name,g.类别
from out a left join goodlist b on a.goodid=b.goodid
left join depar c on a.deparid =c.deparid
where a.日期 between '2008-01-01' and '2008-02-01'
手写,可能错!
from out a left join goodlist b on a.goodid=b.goodid
left join depar c on a.deparid =c.deparid
group by c.name,b.类别
where a.日期 between '2008-01-01' and '2008-02-01'忘了group
select c.name,b.类别,sum(金额)as '金额',sum(成本)as '成本'
from out a left join goodlist b on a.goodid=b.goodid
left join depar c on a.deparid =c.deparid
where a.日期 between '2008-01-01' and '2008-02-01'
group by c.name,b.类别
select departid, name 部門, goodid,类别,编码,名称,规格,sum(金额) 金额,sum(成本) 成本
from out left join depart on out.departid=depart.departid
left join goodlist on out.goodid=goodlist.goodid
where 日期 between '2008-01-01' between '2008-01-17'
group by departid,goodidselect temp.goodid,类别,编码,名称,规格,temp.departid,name
from
(select goodid,deparid,sum(金额) 金额,sum(成本) 成本
from out
where 日期 between '2008-01-01' between '2008-01-17'
group by departid,goodid) temp
left join goodlist on temp.goodid=goodlist.goodid
left join depar on temp.departid=depar.departid
order by departid,类别兩個隨便挑一個吧
drop table goodlist
if object_id('out') is not null
drop table out
if object_id('depar') is not null
drop table depar
go
create table goodlist(goodid int,类别 varchar(10),编码 varchar(10),名称 varchar(10),规格 varchar(10))
insert goodlist
select 1,'类别1','编码1','资源名称1','规格1' union all
select 2,'类别2','编码2','资源名称2','规格2' union all
select 3,'类别2','编码3','资源名称3','规格3' union all
select 4,'类别3','编码4','资源名称4','规格4' union all
select 5,'类别1','编码5','资源名称5','规格5'create table out(outid int,goodid int,deparid int,数量 int,单价 float,金额 float,成本 float,日期 datetime)
insert out
select 1,1,1,10,10.1,101,50,'2008-1-16' union all
select 2,2,2,11,10.1,101,60,'2008-1-15' union all
select 3,3,2,12,10.1,101,70,'2008-1-16' union all
select 4,1,2,13,10.1,101,80,'2008-1-17' union all
select 5,2,2,14,10.1,101,90,'2008-1-18' union all
select 6,4,2,15,10.1,101,100,'2008-1-15' union all
select 7,5,1,16,10.1,101,97,'2008-1-17' create table depar(deparid int,name_ch varchar(100))
insert depar
select 1,'部门1' union all
select 2,'部门2'select isnull(cast(aa.deparid as varchar(10)),'总计'),isnull(aa.类别,'小计'),sum(aa.金额) as 金额和,sum(aa.成本)as 成本和 from
(
select b.类别,a.deparid,a.数量,a.单价,a.金额,a.成本,a.日期 from out a
inner join goodlist b on a.goodid=b.goodid
where 日期 between '2008-1-15' and '2008-1-17'
) aa
group by aa.deparid,aa.类别
with rollup
看看是你想要的吗
select a.name , 金额 = sum(b.金额) , 成本 = sum(b.成本) from depar a , out b where a.deparid = b.deparid--按商品类别汇总
select a.类别 , 金额 = sum(b.金额) , 成本 = sum(b.成本) from goodlist a , out b where a.goodid = b.goodid--按部门+商品类别汇总
select t.* , 金额 = sum(c.金额) , 成本 = sum(c.成本) from
(select a.name , b.类别 from depar , goodlist b) t, out c
where t.deparid = c.deparid and t.goodid = c.goodid