ProjectId   Money    User         AddDate
 1           200      1         2012-02-01
 1           300      2         2012-02-01
 1           400      1         2012-03-01
 
 如何查询出这个项目这个项目的总收益?每个月份的收益,总共进行月份,以及当前是项目中的第几个月份?
比如 当月收益    总收益         实际月份         项目周期    项目周期中的月份 
  500          900          2012-02-01        2个月          1
  400          900          2012-03-01        2个月          2

解决方案 »

  1.   

    row_number()over(partition by 总体项目 order by  实际月份) as 项目周期中的月份
      

  2.   


    select 当月收益, 总收益, 实际月份, 项目周期,datediff(mm,(select top (1) 实际月份  from tb where ProjectId  = a.ProjectId order by 实际月份),实际月份)+1 as 项目周期中的月份 from tb 
      

  3.   

    谢谢,这个问题解决了,
    然后悲剧了,出来了2个ProjectId,跟Project联合的时候出现笛卡尔积了- -
      

  4.   

    --构建示例数据
    create table #tb(ProjectId int, Money int, [User] int, AddDate varchar(10))
    insert into #tb
    select 1, 200, 1, '2012-02-01'
    union all select 1, 300, 2, '2012-02-01'
    union all select  1, 400, 1, '2012-03-01'
    --解决方案
    select ProjectId, sum(Money)当月收益,sum(sum(Money))over(partition by ProjectId )总收益, 
    AddDate 实际月份,cast(datediff(mm,min(AddDate)over(),max(AddDate)over())+1 as varchar(10)) +'个月' 项目周期中的月份,
    datediff(mm,min(AddDate)over(),AddDate)+1 as 项目周期中的月份  from #tb group by ProjectId,AddDate
    /*ProjectId   当月收益        总收益         实际月份       项目周期中的月份       项目周期中的月份
    ----------- ----------- ----------- ---------- -------------- -----------
    1           500         900         2012-02-01 2个月            1
    1           400         900         2012-03-01 2个月            2(2 行受影响)
    */整个帮你重写了