Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL за получаване на следващата не нулева стойност в колона

Един от методите е да използвате outer apply :

select t.*, t2.orig as newval
from @t t outer apply
     (select top 1 t2.*
      from @t t2
      where t2.id >= t.id and t2.orig is not null
      order by t2.id
     ) t2;

Един от начините, по които можете да направите това с прозоречни функции (в SQL Server 2012+), е да използвате кумулативен максимум за id в обратен ред:

select t.*, max(orig) over (partition by nextid) as newval
from (select t.*,
             min(case when orig is not null then id end) over (order by id desc) as nextid
      from @t
     ) t;

Подзаявката получава стойността на следващия не-NULL документ за самоличност. След това външната заявка разпространява orig стойност върху всички редове с еднакъв id (не забравяйте, че в група редове с еднакъв nextid , само един ще има не-NULL стойност за orig ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да присвоя вмъкната изходна стойност на променлива в sql сървър?

  2. SQL ИМА ГРУПИРАНЕ НА СУМА ПО

  3. SQL Server 2008 Разделен низ от полето в записа

  4. Внедряване на бази данни на SQL Server от Test to Live

  5. Въпрос за SQL Deadlock