2014-10-31 49 views
0

累计总和我试图让累加和throught柱week(如果是可能的,那么得到的结果通过Datum$ADTE列排序)我的查询:与条件

select 
     A.Castka "Amount", 
     'Cashflow' as N, 
     A.Datum$DATE "Datum", 
     cast(A.Rok as varchar(4)) + '-' + cast(A.Tyden as varchar(4)) "Week" 
    from iGateCashflow A 
    where 
    1 = 1 
     and A.BusTransaction_ID = '1D00000101' 
     and A.Vyjasneno = 'A' 
     and cast(datepart(week ,convert(date, dbo.ib_DateToString(Napocteno$DATE, 'dd.mm.yyyy'), 104)) as varchar(4)) 
       =  44 

where子句条件,伟驰会编辑通过外部表单。

我想获得结果如下(不Amount列更好)

week  N  Amount  Result 
44 Cashflow 150   150 
45 Cashflow 200   350 
46 Cashflow 300   650 
47 Cashflow 350   1000 

我想是这样的,但我不能达到我预期的结果:

select 
    sum(y.Amount), 
    Y.N, 
    Y.Week 
from (
    select 
     A.Castka "Amount", 
     'Cashflow' as N, 
     A.Datum$DATE "Datum", 
     cast(A.Rok as varchar(4)) + '-' + cast(A.Tyden as varchar(4)) "Week" 
    from iGateCashflow A 
    where 
     1 = 1 
     and A.BusTransaction_ID = '1D00000101' 
     and A.Vyjasneno = 'A' 
     and cast(datepart(week ,convert(date, dbo.ib_DateToString(Napocteno$DATE, 'dd.mm.yyyy'), 104)) as varchar(4)) 
       = 44 
) X 
join (
    select 
     A.Castka "Amount", 
     'Cashflow' as N, 
     cast(A.Rok as varchar(4)) + '-' + cast(A.Tyden as varchar(4)) "Week" 
    from iGateCashflow A 
    where 
     1 = 1 
     and A.BusTransaction_ID = '1D00000101' 
     and A.Vyjasneno = 'A' 
     and cast(datepart(week ,convert(date, dbo.ib_DateToString(Napocteno$DATE, 'dd.mm.yyyy'), 104)) as varchar(4)) 
       = 44 
    ) Y on Y.Week <= X.Week 
group by 
    Y.N, 
    Y.Week 
order by 
    Y.Week 

回答

1

我想你的问题比你展示的还多。但使用此作为一个想法(你需要在WHERE条件等,添加)

SELECT *, 
     SUM(Amount) OVER (ORDER BY [week]) 
FROM iGateCashflow 
+0

谢谢,通过这我解决我的问题。 – Sk1X1 2014-11-02 22:14:28

0

也许尝试像这样的东西

select 
    cast(A.Rok as varchar(4)) + '-' + cast(A.Tyden as varchar(4)) "Week", 
    sum(B.Castka) "Total amount" 
from iGateCashflow A 
inner join iGateCashflow B 
    on A.BusTransaction_ID = B.BusTransaction_ID 
    and A.Vyjasneno = B.Vyjasneno 
    and B.week <= A.week --> if week is a calculated field, include the calculation here for both 'week's 
where 
    1 = 1 
    and A.BusTransaction_ID = '1D00000101' 
    and A.Vyjasneno = 'A' 
    and cast(datepart(week ,convert(date, dbo.ib_DateToString(Napocteno$DATE, 'dd.mm.yyyy'), 104)) as varchar(4)) 
      = 44 
group by cast(A.Rok as varchar(4)) + '-' + cast(A.Tyden as varchar(4)) "Week" 
1

更好地使用OVER子句按周计算总分区,按日期排序,请参考 Over Clause