2014-10-31 24 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