Numerowanie wierszy w bazie firebird

0

Witam mam pytanie odnośnie ponumerowania wierszy w tabeli firebird. Mam ok 1000 artykułów i potrzebuję ustawić w drugiej kolumnie indeks np 0001 w górę, czy da się to zrobić z automatu ?

0

Z tego co kojarzę to się powinno dać. Wystarczy posortować po jakiejś kolumnie, np. nazwie. A w indeks wstawić liczbę mniejszych od aktualnego. Coś w ten deseń:

update tabela A set A.indeks = (select count (1) from tabela B where B.nazwa <= A.nazwa)

Jeśli to jednorazowa sytuacja można tak zrobić, ale im większy zbiór rekordów tym dłużej to się będzie wykonywać. A żeby wypełnić stringa zerami możesz użyć funkcji LPAD()

Na koniec mała uwaga. Nie testowałem tego, pisałem z palca, mogą być błędy. Jednak widać mój tok postępowania.

0

Nie za bardzo rozumiem mam dwie kolumny w bazie jedna kolumna nazywa się towar a druga indeks. Kolumnę towar mam spisaną natomiast kolumnę indeks pustą i potrzebuję ją wypełnić z góry na dół od 1 do 1000.

0

No to czego nie rozumiesz... Patrzyłeś co zrobi ten update? Jakoś musisz ponumerować, więc jako numer ustalam liczbę mniejszych bądź równych rekordów posortowanych po nazwie. W ten sposób dostaniesz to czego chcesz, o ile nazwy są unikalne. Bo jakąś kolejność musisz przyjąć przecież. A tak jest najprościej. Testowałem i działa.

0

Dzięki za odpowiedź ale u mnie nie działa tylko wyświetla w polu indeks liczbę rekordów zlicza je a nie numeruje.
Moja tabela wygląda tak iż są dwie kolumny ARTYKUL I INDEKS.

0

To ja już nie mam pojęcia co robisz nie tak. Oto dowód. Tabela przed wykonaniem zapytania:
b29fef3b93.png
Same zapytanie:

update
  TABELA A
set
  A.INDEKS = LPAD((select count(1) from TABELA B where B.NAZWA <= A.NAZWA),5,0)

Tabela po wykonaniu zapytania:
ad864c614b.png

Jak widzisz u mnie działa. Chyba, że chcesz uzyskać coś innego. Ale tu najlepiej pokaż co i jak.

0

UPDATE
materialy
SET
artykul = LPAD((SELECT COUNT(1) FROM materialy WHERE indeks <= artykul),5,0)

materialy to tabela
artykul to kolumna w tabeli materialy
indeks to kolumna w tabeli materialy

nie wiem czy dobrze

0

To co pokazałeś to jest to o co mi chodzi tylko Mi nie wychodzi

0

Ok już nadaje liczby od 1 w górę ustawiłem pod ID tylko zauważyłem iż nadawane numery nie są po kolei tz. są dziury w numeracji i niektóre się powtarzają.

0

A nazwy są unikalne?

0

Wydaje mi się właśnie, że tak jak kolega hipekk zauważył nie masz unikalnych nazw. Jeśli nie, to użyj zamiast nazwy, klucza głównego w tabeli. Powinno zadziałać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1