Re-ordenar uma coluna em sql server usando a coluna id como como base
4 respostasResolvido
sqlserver
T
Tayonan
Olá eu estou buscando uma solução pra isso que parece simples no entanto preciso de uma ajuda de fora, eu tenho uma tabela onde existe uma coluna que se chama nota e nessa coluna é adicionado um valor numerico sempre que é criada um fatura e gera uma linha a mais sequindo sempre a ordem sequencial porém nem todas as notas são úteis e algumas são deletadas, então minha tabela se encontra como no exemplo abaixo:
idnota11253849516617
Agora a questão é: como eu poderia reordenar somente a tabela nota porem identificando primeiro um numero que está em id, Exemplo eu decido que quero organizar os numeros em nota apartir do id 4 e as linhas anteriores não serão editadas e tenha uma saida como no exemplo a seguir:
Poderia explicar melhor, porque o id 5 passa a ter nota 10 e o id 6 passa a ter nota 11?
T
Tayonan
Então digamos que eu desejo reordenar uma coluna de forma numerica para que não exista nenhum numero sendo pulado e restabelecer a ordem porém poderia dizer que quero reordenar apartir da nota de numero 9 como no exemplo, mas digamos que em um ambiente real voce teria 50 mil notas, seria dificil de checar apartir de qual nota você quer reordenar.
agora imagina se ao invéz de id a coluna fosse data então você passaria para o seu ambiente uma query que diria que apartir do dia 4 de algum mes e algum ano e hora você gostaria de reordenar a coluna nota que esta inclusa nessa data em diante.
O segundo exemplo não é resultado de uma query é mais uma ideia de oque eu espera ver na saida, o id 4 corresponde a mesma linha de nota 9 então se fosse reordenado apartir de aí a proxima nota que é 16 viraria a 10 e a nota 17 viraria a 11 pra compor a sequência porém as notas que vem antes não deveriam ser afetadas.
S
staroski
SQL não é minha especialidade, mas acredito que você possa fazer algo mais ou menos assim:
-- Identificar a nota mínima a partir de onde reordenarWITHnotas_ordenadasAS(SELECTid,ROW_NUMBER()OVER(ORDERBYnota)ASnova_notaFROMnotasWHEREnota>=(SELECTMIN(nota)FROMnotasWHEREnota>=9))-- Atualizar as notasUPDATEnotasSETnota=notas_ordenadas.nova_notaFROMnotas_ordenadasWHEREnotas.id=notas_ordenadas.id;
T
Solucao aceita
Tayonan
Fiz algumas alterações na sintaxe e funcionou direitinho cheguei onde precisava.
Agora inserindo o numero ID especifico busca o numero localizado na mesma linha porém na coluna nota e renumera (coluna nota) em sequencia a partir daí.
DECLARE@notaint;Declare@idint=2428-- <--substituir pelo id desejadoSELECT@nota=notaFROMnotasWHEREid=@id;WITHCTEAS(SELECT*,ROW_NUMBER()OVER(ORDERBYnota)+(@nota-1)ASNovaNotaFROMnotasWHEREnota>=@nota)UPDATECTESETnota=NovaNota;select*fromnotas