dearbook 2004-9月 销售排行
2003年:10月 11月 12月 2004年:1月 2月 3月 4月 5月 6月 7月 8月 9月
日排行 周排行 月排行 年排行
这个表中至少有一个销售日期,然后根据销售日期来统计排名:
日排行 周排行 月排行 年排行
2003年:10月 11月 12月 2004年:1月 2月 3月 4月 5月 6月 7月 8月 9月
日排行 周排行 月排行 年排行
这个表中至少有一个销售日期,然后根据销售日期来统计排名:
日排行 周排行 月排行 年排行
ID:唯一标识
OrdDate:成交日期表:OrderProduct
ID:唯一标识
OrdeID:对应的定单ID
ProdID:对应的产品ID
Quantity:订购的数量
@type nchar(1)='周',--查询类型:日/周/月/年
@count int=20 --查询排名前20位
as
set nocount on
declare @dta1 datetime,@dta2 datetime
,@dtb1 datetime,@dtb2 datetime--统计的起止时间
if @type='日'
select @dta1=convert(char(10),getdate(),120)
,@dta2=@dta1+1
,@dtb1=@dta1-1
,@dtb2=@dta1
else if @type='周' --模仿csdn社区周排名榜,从今天至今天-6算本周(下同)
select @dta2=convert(char(10),getdate()+1,120)
,@dta1=@dta2-6
,@dtb1=@dta1-6
,@dtb2=@dta1
else if @type='月'
select @dta2=convert(char(10),getdate()+1,120)
,@dta1=dateadd(month,-1,@dta2)
,@dtb1=dateadd(month,-1,@dta1)
,@dtb2=@dta1
else --'年'
select @dta2=convert(char(10),getdate()+1,120)
,@dta1=dateadd(year,-1,@dta2)
,@dtb1=dateadd(year,-1,@dta1)
,@dtb2=@dta1
set rowcount @count--本期
select 排名=identity(int)
,p.ProdID,成交量=count(distinct p.OrdeID)
into #ta
from [Order] o,OrderProduct p
where o.id=p.OrdeID
and o.OrdDate>=@dta1 and o.OrdDate<@dta2
group by p.ProdID
order by 成交量--上期
select 排名=identity(int),p.ProdID--,成交量=count(distinct p.OrdeID)
into #tb
from [Order] o,OrderProduct p
where o.id=p.OrdeID
and o.OrdDate>=@dtb1 and o.OrdDate<@dtb2
and exists(
select * from #ta where ProdID=p.ProdID)
group by p.ProdID
order by count(distinct p.OrdeID)--成交量--显示出结果
select 产品号=a.ProdID,现在排名=a.排名,a.成交量
,名次变化=case
when b.排名 is null then '新上市'
when b.排名=a.排名 then '平'
when b.排名>a.排名 then '降'
else '升' end
from #ta a
left join #tb b on a.ProdID=b.ProdID
order by a.排名
go--调用
exec p_qry '日'
exec p_qry '周'
exec p_qry '月'
exec p_qry '年'
go
每次来问SQL问题都是你帮忙解决的
谢了