系统:sql server 2005.
我准备写一个按月份和年份统计汇总销售数量的存储过程,销售表T_Sale的字段为:
1.销售日期(类型:datetime),名称Sale_rq
2.销售数量,名称Sale_sl
销售日期是可以跨好几年的,所以要先求出现在销售表T_Sale的Sale_rq的最小值和最大值(比如最小值2005-04-06,最大值2010-04-20)
我的求助是:
1.如何把2005-04-06~2010-04-20内的销售数量按月份统计。
2.如何把2005-04-06~2010-04-20内的销售数量按年份统计。
请写出相应的SQL语句。
我准备写一个按月份和年份统计汇总销售数量的存储过程,销售表T_Sale的字段为:
1.销售日期(类型:datetime),名称Sale_rq
2.销售数量,名称Sale_sl
销售日期是可以跨好几年的,所以要先求出现在销售表T_Sale的Sale_rq的最小值和最大值(比如最小值2005-04-06,最大值2010-04-20)
我的求助是:
1.如何把2005-04-06~2010-04-20内的销售数量按月份统计。
2.如何把2005-04-06~2010-04-20内的销售数量按年份统计。
请写出相应的SQL语句。
--如果你需要存储过程,则如下,把时间做为参数传进去。create procedure my_proc @dt1 datetime,@dt2 datetime
as
begin select convert(varchar(7),Sale_rq,120) 月份 , sum(Sale_sl) 销售数量 from T_Sale where Sale_rq between @dt1 and @dt2 group by convert(varchar(7),Sale_rq,120) select year(Sale_rq) 年份 , sum(Sale_sl) 销售数量 from T_Sale where Sale_rq between @dt1 and @dt2 group by year(Sale_rq)
end
goexec my_proc '2005-04-06' , '2010-04-20'
一楼正解
select convert(char(7),Sale_rq,23) 月份,sum(Sale_sl) 销售数量
from T_Sale
where Sale_rq between '2005-04-06' and '2010-04-20'
group by convert(char(7),Sale_rq,23)
--年份:
select year(Sale_rq) 年份,sum(Sale_sl) 销售数量
from T_Sale
where Sale_rq between '2005-04-06' and '2010-04-20'
group by year(Sale_rq)
select convert(varchar(7),getdate(),120)/*
-------
2010-04(所影响的行数为 1 行)*/
select year(Sale_rq) 年份 , sum(Sale_sl) 销售数量 from T_Sale where Sale_rq between '2005-04-06' and '2010-04-20' group by year(Sale_rq)
不知道行不???
create table #t
(sale_rq datetime,
sale_sl int default 0
)
insert into #t
select '20050101',100
union all select '20050201',100
union all select '20050301',100
union all select '20050401',100
union all select '20060401',100
union all select '20060501',100
union all select '20060801',100
union all select '20070801',100
union all select '20070901',100
union all select '20080901',100Select Case When (Grouping(convert(varchar(4),Sale_rq,120))=1) Then '总计' Else Isnull(convert(varchar(4),Sale_rq,120), '总计') End As 年度,
Case When (Grouping(convert(varchar(2),month(Sale_rq),0))=1) Then '小计' Else Isnull(convert(varchar(2),month(Sale_rq),0), '小计') End As 月份,
SUM(Sale_sl) 销售数量
from #t
where Sale_rq between '2005-04-06' and '2010-04-20' group by convert(varchar(4),Sale_rq,120),convert(varchar(2),month(Sale_rq),0) with rollupdrop table #t--结果没细看
2006 4 100
2006 5 100
2006 8 100
2006 小计 300
2007 8 100
2007 9 100
2007 小计 200
2008 9 100
2008 小计 100
总计 小计 600
select convert(varchar(7),Sale_rq,120) 月份 , sum(Sale_sl) 销售数量
from T_Sale where Sale_rq
between (select min(Sale_rq) from t_sale) and (select max(Sale_rq) from t_sale)
group by convert(varchar(7),Sale_rq,120)select year(Sale_rq) 年, sum(Sale_sl) 销售数量 from T_Sale where
Sale_rq between (select min(Sale_rq) from t_sale) and (select max(Sale_rq) from t_sale)
group by year(Sale_rq)
多谢了,各位,来着都有分