2016-09-13 150 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,你正在使用什么版本? –