Как переместить все ненулевые значения в верхнюю часть моего столбца? - PullRequest
1 голос
/ 02 июня 2019

В моей таблице есть следующие данные:

   | Id  |  lIST_1      |
   ----------------------
   | 1   |  NULL        |
   | 2   |  JASON       |
   | 3   |  NULL        |    
   | 4   |  BANDORAN    |
   | 5   |  NULL        |
   | 6   |  NULL        | 
   | 7   |  SMITH       | 
   | 8   |  NULL        |

Как мне написать запрос, чтобы получить вывод ниже?

   | Id  |  lIST_1      
   -----------------------
   | 1   |  JASON        |
   | 2   |  BANDORAN     |
   | 3   |  SMITH        |  
   | 4   |  NULL         |
   | 5   |  NULL         |
   | 6   |  NULL         |
   | 7   |  NULL         |
   | 8   |  NULL         |

1 Ответ

1 голос
/ 02 июня 2019

Вы можете использовать order by:

select row_number() over (order by (select null)) as id, t.list_1
from t
order by (case when list_1 is not null then 1 else 2 end)

Неясно, почему вы хотите id изменить значения, но вы можете использовать row_number() для этого.

EDIT:

Если вы хотите изменить id, то вы можете сделать:

with toupdate as (
      select row_number() over (order by (case when list_id is not null then 1 else 2 end), id
                               ) as new_id,
             t.*
      from t
     )
update toupdate
    set id = new_id
    where id <> new_id;  -- no need to update if the value remains the same
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...