我有一张表及其记录:
Profile | Level | CHgt | BHgt | SHgt | Z ABCD1 | 1 | 15 | 11 | 50 | 0 ABCD1 | 2 | 15 | 11 | 70 | 0 ABCD1 | 3 | 15 | 11 | 70 | 0 ABCD2 | 1 | 15 | 11 | 60 | 0 ABCD2 | 2 | 15 | 11 | 80 | 0 ABCD2 | 3 | 15 | 11 | 80 | 0 ABCD3 | 1 | 15 | 11 | 40 | 0 ABCD3 | 2 | 15 | 11 | 60 | 0 ABCD3 | 3 | 15 | 11 | 60 | 0 ABCD1 | 1 | 15 | 11 | 50 | 0 ABCD1 | 2 | 15 | 11 | 70 | 0 ABCD1 | 3 | 15 | 11 | 70 | 0
我想计算Z,但是我需要再创建两个变量(BHgt2,SHgt2:可以在计算的后端创建)
Profile | Level | CHgt | BHgt | SHgt | BHgt2 | SHgt2 | Z ABCD1 | 1 | 15 | 11 | 50 | 11 | 0 | 26 ABCD1 | 2 | 15 | 11 | 70 | 22 | 120 | 157 ABCD1 | 3 | 15 | 11 | 70 | 33 | 190 | 238 ABCD2 | 1 | 15 | 11 | 60 | 11 | 0 | 26 ABCD2 | 2 | 15 | 11 | 80 | 22 | 140 | 177 ABCD2 | 3 | 15 | 11 | 80 | 33 | 220 | 268 ABCD3 | 1 | 15 | 11 | 40 | 11 | 0 | 26 ABCD3 | 2 | 15 | 11 | 60 | 22 | 100 | 137 ABCD3 | 3 | 15 | 11 | 60 | 33 | 170 | 218 ABCD1 | 1 | 15 | 11 | 50 | 11 | 0 | 26 ABCD1 | 2 | 15 | 11 | 70 | 22 | 120 | 157 ABCD1 | 3 | 15 | 11 | 70 | 33 | 190 | 238
本质上,BHgt2是通过Profile累积的,Level和SHgt2是其值+先前值的累积,但是,Level 1 = 0,最后Z = CHgt + BHgt2 + SHgt2
我试过使用ROW_Number&joins和cte;的组合;但我的想法似乎被卡住了。
如果不可能使用单个选择语句,则可能首先更新BHgt2和SHgt2的查询
然后选择查询以计算Z
任何人都有一个选择语句的主意吗?这是用于SQL Server 2008
有两项:1)除了Level = 0以外,Gordon的反应几乎是现场的。应该为Level = 1
2)我不确定您期望的结果的最后一行是正确的,我认为您的成绩是10分。 如果我不正确,请告诉我,我将再次进行讨论。
Declare @Table table (Profile varchar(25),Level int,CHgt int,BHgt int, SHgt int, Z int) Insert into @Table values ('ABCD1' , 1 , 15 , 11 , 50 , 0), ('ABCD1' , 2 , 15 , 11 , 70 , 0), ('ABCD1' , 3 , 15 , 11 , 70 , 0), ('ABCD2' , 1 , 15 , 11 , 60 , 0), ('ABCD2' , 2 , 15 , 11 , 80 , 0), ('ABCD2' , 3 , 15 , 11 , 80 , 0), ('ABCD3' , 1 , 15 , 11 , 40 , 0), ('ABCD3' , 2 , 15 , 11 , 60 , 0), ('ABCD3' , 3 , 15 , 11 , 60 , 0) select A.Profile ,A.Level ,A.CHgt ,A.BHgt ,A.SHgt ,B.Bhgt2 ,Shgt2 = case when Level = 1 then 0 else SHgt2 end ,Z = CHgt + B.Bhgt2 + case when level = 1 then 0 else SHgt2 end From @Table A Cross Apply (Select Bhgt2 = sum(Bhgt) ,SHgt2 = sum(SHgt) From @Table B Where B.Profile = A.Profile and A.Level >= B.Level ) B;
退货
Profile Level CHgt BHgt SHgt Bhgt2 Shgt2 Z ABCD1 1 15 11 50 11 0 26 ABCD1 2 15 11 70 22 120 157 ABCD1 3 15 11 70 33 190 238 ABCD2 1 15 11 60 11 0 26 ABCD2 2 15 11 80 22 140 177 ABCD2 3 15 11 80 33 220 268 ABCD3 1 15 11 40 11 0 26 ABCD3 2 15 11 60 22 100 137 ABCD3 3 15 11 60 33 160 208