sql >> Database >  >> RDS >> Sqlserver

Vorige waarde voor nulwaarden krijgen

Aangezien u SQL Server 2012 gebruikt... is hier een versie die dat gebruikt. Het is misschien sneller dan andere oplossingen, maar dat moet je testen op je gegevens.

sum() over() zal een lopende som doen op volgorde van Id 1 toevoegen wanneer er een waarde in de kolom staat en de huidige waarde behouden blijft voor null waarden. De berekende lopende som wordt vervolgens gebruikt om het resultaat te partitioneren in first_value() over() . De eerste waarde gerangschikt op Id want elke "groep" rijen die door de lopende som worden gegenereerd, heeft de gewenste waarde.

select T.Id,
       first_value(T.FeeModeId) 
          over(partition by T.NF 
               order by T.Id 
               rows between unbounded preceding and current row) as FeeModeId,
       first_value(T.Name)      
          over(partition by T.NS 
               order by T.Id 
               rows between unbounded preceding and current row) as Name,
       T.Amount
from (
     select Id,
            FeeModeId,
            Name,
            Amount,
            sum(case when FeeModeId is null then 0 else 1 end) 
              over(order by Id) as NF,
            sum(case when Name is null then 0 else 1 end) 
              over(order by Id) as NS
     from YourTable
     ) as T

SQL Fiddle

Iets dat zal werken vóór SQL Server 2012:

select T1.Id,
       T3.FeeModeId,
       T2.Name,
       T1.Amount
from YourTable as T1
  outer apply (select top(1) Name
               from YourTable as T2
               where T1.Id >= T2.Id and
                     T2.Name is not null
               order by T2.Id desc) as T2
  outer apply (select top(1) FeeModeId
               from YourTable as T3
               where T1.Id >= T3.Id and
                     T3.FeeModeId is not null
               order by T3.Id desc) as T3

SQL Fiddle



  1. Waarom gebruiken we altijd liever parameters in SQL-statements?

  2. C# verbinden met mysql via gebruikerscontrole

  3. De 3 belangrijkste kenmerken van big data begrijpen

  4. Kan ingevoegde gegevens van MySQL niet onmiddellijk zien