Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nummerierungs- Lücken per SQL-(SELECT) finden... (https://www.delphipraxis.net/4824-nummerierungs-luecken-per-sql-select-finden.html)

Gast 13. Mai 2003 10:50


Nummerierungs- Lücken per SQL-(SELECT) finden...
 
Hallo 8)

In einer SQL- Tabelle z.B. KUNDEN befinden sich in einer Spalte z.B. Spalte KDNUMMER die Kundennummer.

Angenommen wir haben in der Tabelle KUNDEN bereits 100 Datensätze. Dies bedeutet auch, dass in der Spalte KDNUMMER stehen in jedem Datensatz entsprechend die Kundennummer von 1 bis 100.

Mit der Zeit wurden aber die Kundennummer 20, 45 und 60 gelöscht... und somit auch die Datensätze.

Man will jetzt einen neuen Kunden anlegen. Normaleweise sollte er die Kundennummer = 101 kriegen.

PROBLEM:

Kann ich allein durch eine SQL- Anweisung (SELECT) mir an diese Stelle irgendwie die erste Lücke anzeigen (hier wäre das die KdNummer = 20)

Falls es eine Lösung gibt dann irgendwie komme ich hier nicht drauf....

Falls jemand ein Lösungsvorschlag hat ist dann mir egal ob es in Ms-SQL / Interbese usw... ist


Gruß

Paul Jr.

Jelly 13. Mai 2003 12:53

Hallo,

versteh ich dich richtig dass du dem neuen Kunden dann die Nummer 20 geben willst? Davon würd ich abraten, da es den Kunden 20 schon mal in der Vergangenheit gab. Sicherer ist es daher trotzdem die Nummer 101 zu vergeben.

Aber zu deiner Frage... ich such mal, ich glaube schon mal sowas gehabt zu haben.

Gruss,
Tom

Gast 13. Mai 2003 13:08

Lieber Tom, :D

es geht hier nicht um Kunden oder Kundennummer...

Es geht hier viel mehr um Prinzip bzw. die FRAGE:


Lässt sich eine SQL-Anweisung so konzipieren, dass ich eine „Lücke“ als Ergebnis zurückbekomme...

Die KundenNummer dienten hier NUR als Beispiel... um die Problematik besser zu verstehen...

Ich hoffe, dass ich Dich beruhigt :shock: habe ....und wenn Du was zu diesem Thema finden solltest... es wäre TOLL 8)


Gruß

Paul Jr.

P.S.

Natürlich wie man ein TDataSet sequentiell durchläuft habe ich drauf... :mrgreen:

/

Lemmy 13. Mai 2003 15:14

Hi Paul Jr.

nur mal so als Gedanke:

SQL arbeitet ja mengenorientiert, d.h. es gibt keinen ersten und keinen zweiten. Letztendlich brauchst Du aber genau das!

Mit ner "einfachen" SQL kommst Du da nicht ran (so nach dem Motto, vergleiche mir die ID mit der ID des Vorgängers). Aber auch mit ner Stored Procedure wüsste ich im Moment nicht wie das gehen soll....

Die Datenmenge auf dem Client zu durchlaufen macht aber ebenfalls keinen Sinn, sobald mehr als ein Benutzer auf die Datenmenge zugreifen kann!

Grüße
Lemmy

Garby 13. Mai 2003 17:07

Hallo allerseits,

Das ist tatsächlich etwas gefinkelt...
In Oracle (und wahrscheinlich auch IB oder anderen SQL-DB´s) könnte das so funktionieren:
SQL-Code:
Select Min(KDNUMMER + 1) As KDNUMMER
  From KUNDEN t
 Where (Select Count(KDNUMMER)
          From KUNDEN
         Where KDNUMMER = t.KDNUMMER + 1) = 0
Diese Anweisung ist allerdings auch nicht 100%ig richtig.

z.B. habe ichs mit einer Tabelle probiert, dessen niedrigster Wert in der zu überprüfenden Spalte 181 ist.
Da gibt die Anweisung natürlich 182 zurück.

Delphianer 13. Mai 2003 18:00

Hallo,

das gleiche noch einmal ähnlich:

select min(k1.kdnummer)+1 kdnummer from kunden k1 where not exists (select k2.kdnummer from kunden k2 where k2.kdnummer=k1.kdnummer+1)

Die Anweisung hat allerdings einen Schönheitsfehler - sie sucht erst ab der ersten existierenden Kundennummer.

Viele Grüße

Gast 14. Mai 2003 07:12

Hallo Männer! 8)

zuerst DANKE...und jetzt werde ich Eure Vorschläge prüfen :coder: und dann melde ich mich zurück...

Gruß

Paul Jr.

Gast 14. Mai 2003 08:20

Hallo Garby :D
Hallo Delphianer :D

Ihr BEIDE hat mir das gegeben was ich brauchte !

Dafür besten DANK... :!: :!: :!:

Jetzt kann ich mir eine Storage-Procedure basteln die z.B. als Parameter die Minimale KUNDENNUMMER Zahl bekommt. Somit kann ich bestimmen was noch als Lücke zu interpretieren ist und was nicht.... usw...

Dieses SQL-Script habe ich dringend gebraucht...

Toll !!!

Viele Grüße

Paul Jr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz