sql >> Database >  >> RDS >> Sqlserver

SQL:cumulatieve kolommen &som over de rij

Twee items:1) Gordons antwoord was vrijwel perfect, behalve Niveau=0. Moet niveau =1 zijn

2) Ik ben er niet van overtuigd dat de laatste rij van je gewenste resultaten correct is, ik denk dat je er om 10 uur naast zit. Als ik het niet juist heb, laat het me weten en ik zal dit opnieuw bezoeken.

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;

Retourneren

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. MySQL - tel actieve/inactieve/verbannen gebruikers en selecteer gebruikers op basis van status in één zoekopdracht

  2. PHP, ORM, MSSQL en Unicode, is het mogelijk om deze samen te laten werken?

  3. Hoe zorg ik ervoor dat de functies NOW() en CURDATE() van MySQL UTC gebruiken?

  4. Tijdelijke oplossing in mysql voor gedeeltelijke index of gefilterde index?