Cheok Yan Cheng:
Depois de várias tentativas, eu era capaz de gerar uma row_number()
coluna com o valor que eu desejava.
select "order", row_number() over win - 1, type, title, body, searched_string from plain_note
WINDOW win AS (
order by
title desc,
case when type = 0 then body else searched_string end desc
)
Agora, eu gostaria de toda sobrescrever "ordem" da coluna, com o valor de "row_number () ao longo de vitória - 1"
Por exemplo,
- Na primeira fila, eu gostaria de atualizar a "ordem" de coluna (valor original 13) com o valor 0.
- Na 2ª fila, eu gostaria de atualizar a "ordem" de coluna (valor original 14) com valor 1.
- ... e assim por diante.
Posso saber, qual é a declaração SQLite correta de fazê-lo? Obrigado.
A abordagem que eu tinha tentado até agora é
update plain_note set "order" = (
select row_number() over win - 1 from plain_note
WINDOW win AS (
order by
title desc,
case when type = 0 then body else searched_string end desc
)
);
No entanto, isso fará com que TODOS fileiras de "ordem", tendo 1ª fila do "row_number () ao longo de vitória - 1" valor, que é 0.
passarão:
Seu código está faltando um elo entre linhas da tabela e linhas da subconsulta.
Eu ia escrever o método de atualização como esta:
with cte as (
select *, row_number() over win - 1 as rn from plain_note
window win as (order by
title desc,
case when type = 0 then body else searched_string end desc
)
)
update plain_note set "order" = (select rn from cte where "order" = plain_note."order");
Este trabalho vontade dos valores na coluna "order"
são únicos.