客户表:tc_account(accout_id,account_money) 
订单表:tc_contract(contract_id,account_id,retail_amount,start_date)
retail_amount-订单金额,start_date-订单日期一条客户记录有多条订单记录;我现在想计算每个客户的销售空间值(account_money)=去年1月1号到去年今天这个日期为止的销售额-今年1月1号到今天为止的销售额备注:这个 去年不仅仅指2009年,而是随着时间会变化的,例如到了2011年指的就是2010。
  比如要算到今天为止每个客户的销售空间=(2009-01-01到2009-06-22为止每个客户的销售额)-(2010-01-01到2010-06-22为止每个客户的销售额)

解决方案 »

  1.   

    自己组织一下:select convert(nvarchar(10), cast(ltrim( year(getdate())-1 ) as datetime),120)
    select convert (nvarchar(10),dateadd(yy,-1,getdate()),120)
    select convert(nvarchar(10), cast(ltrim( year(getdate()) ) as datetime),120)
    select convert (nvarchar(10),getdate(),120)
      

  2.   

    --sql2005或sql2008数据库下
    ;with LastYear as
    (
    select account_id
    ,SUM(retail_amount) as retail_amount_sum
    from tc_contract
    where start_date>=CAST(year(getdate())-1 as varchar(4))+'-01-01'
    and start_date<=DATEADD(YY,-1,GETDATE())
    group by account_id
    )
    ,ThisYear as
    (
    select account_id
    ,SUM(retail_amount) as retail_amount_sum
    from tc_contract
    where start_date>=CAST(year(getdate()) as varchar(4))+'-01-01'
    and start_date<=GETDATE()
    group by account_id
    )select a.account_id
    ,b.retail_amount_sum-a.retail_amount_sum
    from ThisYear a
    left join LastYear b
    where a.account_id=b.account_id
      

  3.   

    select account_id
    ,销售空间=(select sum(retail_amount) from tc_contract 
    where account_id=T.account_id
    And start_date between convert(nvarchar(10), cast(ltrim( year(getdate())-1 ) as datetime),120)
                   And convert (nvarchar(10),dateadd(yy,-1,getdate()),120) )
    -(select sum(retail_amount) from tc_contract 
    where account_id=T.account_id
    And start_date between convert(nvarchar(10), cast(ltrim( year(getdate()) ) as datetime),120)
                   And convert (nvarchar(10),getdate(),120) )
    From tc_contract T group by  account_id