dearbook   2004-9月   销售排行 
  2003年:10月 11月 12月   2004年:1月 2月 3月 4月 5月 6月 7月 8月 9月 
  日排行  周排行  月排行  年排行 
 
 这个表中至少有一个销售日期,然后根据销售日期来统计排名:
 日排行  周排行  月排行  年排行
 

解决方案 »

  1.   

    表结构就按这两张表吧表:Order
    ID:唯一标识  
    OrdDate:成交日期表:OrderProduct
    ID:唯一标识 
    OrdeID:对应的定单ID 
    ProdID:对应的产品ID
    Quantity:订购的数量
      

  2.   

    只要一个产品ID和销售时间就够了,至于日排名或周排名用SQL查询语句就能查出.
      

  3.   

    --示例存储过程create proc p_qry
    @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
      

  4.   

    牛人啊,不得不赞一个再结贴
    每次来问SQL问题都是你帮忙解决的
    谢了