Mam taki stół: Wprowadź opis obrazu tutaj

Incident_id jest kluczem obcy. Chcę to osiągnąć -> Utwórz jedną kolejną kolumnę z nazwaną pozycją (int). I zaludnij go tak: Znajdź wszystkie wiersze dla każdej incydentuj_id i zaktualizuj każdy wiersz z indeksem lub listą wierszy, które dostaję przez każdą incydent_id. Exapple: Incident_id 5 meczów z 4 rzędami nutowymi tak zaktualizowane dla pozycji będzie odpowiednio 0, 1, 2, 3. Ty.

1
Demitriush 28 październik 2020, 18:40

1 odpowiedź

Najlepsza odpowiedź

Nie zalecałbym przechowywania takich informacji pochodnych. Zamiast tego możesz utworzyć widok, który używa row_number(), aby wyliczyć wiersze każdego {x1}}:

create view myview as
select t.*, row_number() over(partition by incident_id order by id) - 1 rn
from mytable t

Aby uzyskać stabilny wynik, potrzebujesz kolumny, która może być używana do konsekwentnie zamawiania rzędów każdego zdarzenia: nazywałem go id w zapytaniu. Możesz zmienić to do odpowiedniej nazwy kolumny (lub zestawu kolumn) do użytku; Zazwyczaj używasz podstawowej kolumny kluczowej tabeli.


EDYTUJ

Jeśli naprawdę chciałeś zmaterializować tę wartość w nowej kolumnie, a biorąc pod uwagę, że podstawowy klucz tabeli, zrobiłbyś:

alter table mytable add column position int;

update mytable t
set position = t1.position
from (
    select incident_note_id, 
        row_number() over(partition by incident_id order by incident_note_id) - 1 position
    from mytable
) t1
where t1.incident_note_id = t.incident_note_id;
0
GMB 28 październik 2020, 16:41