Hai mục:1) Phản ứng của Gordon hầu như được phát hiện ngoại trừ Cấp độ =0. Phải là Cấp =1
2) Tôi không tin rằng hàng cuối cùng trong kết quả mong muốn của bạn là chính xác, tôi nghĩ rằng bạn đã tắt trước 10. Nếu tôi không đúng, hãy cho tôi biết và tôi sẽ truy cập lại hàng này.
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;
Trả lại
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