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 ?
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.
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.
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.
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.
To ja już nie mam pojęcia co robisz nie tak. Oto dowód. Tabela przed wykonaniem zapytania:
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:
Jak widzisz u mnie działa. Chyba, że chcesz uzyskać coś innego. Ale tu najlepiej pokaż co i jak.
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
To co pokazałeś to jest to o co mi chodzi tylko Mi nie wychodzi
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ą.
A nazwy są unikalne?
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ć.