0

Example, I have a table like below:

Plan    Name
211 - SELET HIAG    TEST1
NULL    TEST2
NULL    TEST3
NULL    TEST4
NULL    TEST5
213 - SOUND III TEST6
NULL    TEST7
NULL    TEST8
NULL    TEST9
211 - BUBBLE    TEST10
NULL    TEST11
NULL    TEST12
NULL    TEST13
NULL    TEST14

but it should be like this:

Plan    Name
211 - SELET HIAG    TEST1
211 - SELET HIAG    TEST2
211 - SELET HIAG    TEST3
211 - SELET HIAG    TEST4
211 - SELET HIAG    TEST5
213 - SOUND III TEST6
213 - SOUND III TEST7
213 - SOUND III TEST8
213 - SOUND III TEST9
211 - BUBBLE    TEST10
211 - BUBBLE    TEST11
211 - BUBBLE    TEST12
211 - BUBBLE    TEST13
211 - BUBBLE    TEST14

Ps: I have no one identity column

Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786
Everton Gomes
  • 161
  • 1
  • 1
  • 9

1 Answers1

1

You can do this with apply, assuming you have a column specifying the ordering:

select tprev.plan, t.name
from t outer apply
     (select top 1 tprev.*
      from t tprev
      where tprev.plan is not null and tprev.?? <= t.??
      order by tprev.?? desc
     ) tprev;

The ?? is for the column that specifies the ordering.

Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786