2016-09-13 112 views
0

的名字運行數據我有這樣TSQL計算基於月

mis  mnth   IPTV 
------------------------------------ 
0   January   0.2026856 
0   February  0.4860267 
0   March   0.2650674 
0   April   0.1904701 
1   January   0.266809 
1   February  0.310241 
1   March   0.2083876 
1   April   0.3401039 
2   January   0.307787 
2   February  0.5276488 
2   March   0.3037852 
2   April   0.1822988 
3   January   0.8107423 
3   February  0.2430134 
3   March   0.1988006 
3   April   0.2539602 

數據我想補充基於月份累計IPTV。所以「一月」&「二月」應該看起來像這樣,也是本月其餘時間完全相同的方式。

mis  mnth   IPTV 
------------------------------------------------------------------- 
0   January  0.2026856 
0   February  0.4860267 
1   January  0.2026856+ 0.266809 
1   February  0.4860267+0.310241 
2   January  0.2026856+ 0.266809+0.307787 
2   February  0.4860267+0.310241+0.5276488 
3   January  0.2026856+ 0.266809+0.307787+0.8107423 
2   February  0.4860267+0.310241+0.5276488+0.2430134 

等剩下的幾個月。有人可以幫忙嗎?

謝謝

回答

0

不知道,如果你正在尋找TheGameiswar答案或實際運行沒有測試總

您可能注意到,我加了一個月的表只保持序列正確。

Declare @YourTable table (mis int,mnth varchar(25),IPTV decimal(18,9)) 
Insert Into @YourTable values (0,'January',0.2026856),(0,'February',0.4860267),(0,'March',0.2650674),(0,'April', 0.1904701),(1,'January',0.266809),(1,'February',0.310241),(1,'March', 0.2083876),(1,'April', 0.3401039),(2,'January',0.307787),(2,'February',0.5276488),(2,'March',0.3037852),(2,'April',0.1822988),(3,'January',0.8107423),(3,'February',0.2430134),(3,'March',0.1988006),(3,'April',0.2539602) 

Declare @Months table (Seq int,MnthName varchar(25)) 
Insert into @Months values(1,'January'),(2,'February'),(3,'March'),(4,'April'),(5,'May'),(6,'June'),(7,'July'),(8,'August'),(9,'September'),(10,'October'),(11,'November'),(12,'December') 

Select A.mis 
     ,A.mnth 
     ,IPTV = sum(B.IPTV) 
From @YourTable A 
Join @YourTable B on (A.mnth=B.mnth and B.mis<=A.mis) 
Join @Months C on (A.mnth=C.MnthName) 
Group By C.Seq,A.mis,A.mnth 
Order By A.mis,C.Seq 

返回

mis mnth  IPTV 
0 January  0.202685600 
0 February 0.486026700 
0 March  0.265067400 
0 April  0.190470100 
1 January  0.469494600 
1 February 0.796267700 
1 March  0.473455000 
1 April  0.530574000 
2 January  0.777281600 
2 February 1.323916500 
2 March  0.777240200 
2 April  0.712872800 
3 January  1.588023900 
3 February 1.566929900 
3 March  0.976040800 
3 April  0.966833000 
+0

非常感謝您的幫助。 – user2954221

0

雖然

select mis,mnth, 
    stuff((select '+' +cast(iptv as varchar(100)) 
    from table t2 
    where t1.id<=t2.id and t1.mnth=t2.mnth 
    for xml path('')),1,1,'') as val 
    from 
    table t1 
0

感謝@約翰卡佩萊蒂,我的查詢如下所列,基本上這是一個磨合的總方案。

Declare @YourTable table (mis int,mnth varchar(25),IPTV decimal(18,9)) 
Insert Into @YourTable values (0,'January',0.2026856),(0,'February',0.4860267),(0,'March',0.2650674),(0,'April', 0.1904701),(1,'January',0.266809),(1,'February',0.310241),(1,'March', 0.2083876),(1,'April', 0.3401039),(2,'January',0.307787),(2,'February',0.5276488),(2,'March',0.3037852),(2,'April',0.1822988),(3,'January',0.8107423),(3,'February',0.2430134),(3,'March',0.1988006),(3,'April',0.2539602) 

--below is the solution 
select *,sum(iptv)over(partition by mnth order by mis) as Wanted 
from @yourtable 

結果如下:

enter image description here

+0

儘管我會愛你使用這個,並感謝你的解決方案,我得到的錯誤,導致我相信我正在使用舊版本的SQL。 – user2954221

+0

這個查詢可以工作,因爲SQL Server 2005,你正在使用什麼版本? –