sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Ackumulativa kolumner &Summa över raden

Två saker:1) Gordons svar var praktiskt taget perfekt förutom nivån=0. Bör vara Level=1

2) Jag är inte övertygad om att den sista raden av dina önskade resultat är korrekta, jag tror att du är borta med 10. Om jag inte har rätt, låt mig veta så återkommer jag till detta.

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;

Retur

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


  1. Det går inte att anropa en Oracle-lagrad procedur från SSRS-rapportbyggaren 3.0

  2. Få åtkomst till Postgres fjärrserver med pgAdmin

  3. Sammanfoga JSONB-värden i PostgreSQL?

  4. MYSQL Lägg till arbetsdagar till datum