SQL freie Nummer finden

Hallo,

ich habe ein kleines Problem: Ich hab eine Datenbank voll Artikel. Diese Artikel haben eine Haupt- und eine Unter-nummer. Zum Beispiel gibt es folgende Artiekl: 1-0; 1-1; 1-3; 1-4; 1-5 Die große Kunst besteht jetzt die nächst freie Unterartikelnummer zu finden. In diesem Fall wäre das zuerst die 1-2 und als nächstes die 1-6. Aber wie drück ich sowas per SQL aus??? Die Haupt und die Nebennummer stehen in einem separaten Feld.

Vielen Dank für jeden Denkanstoß
Thomas

Hi,
welche Datenbank hast du denn?

Grundsätzlich etwa zb so wenn ich dich richtig verstanden habe:

SELECT Max(t.nebennr) AS MaxNr
FROM Tabelle t
GROUP BY t.hauptnr
HAVING t.hauptnr=1

wobei ich das in einer Mehrbenutzerumgebung so nie machen würde, weil die Nebennummer schon eine Millisekunde nach der Abfrage wieder anders sein kann.

Gruss
Joey

Hey,

es handelt sich um eine MS-Sql 2008 Datenbank. Problem bei der Sache ist das deine Abfrage den Max Wert in der Spalte raussucht. Aber da ist ja das Problem, ich will auch die „Lücken“ füllen, zB wenn es fogende Unternummern gibt:

1-0
1-1
1-2
1-4
1-5

würde deine Abfrage die 5 bringen + 1 ist es die nächst Freie. Hilft mir aber nix, wenn ich eigentlich die 3 als Lösung haben wollte, weil die noch nicht vergeben ist?

Hoffe ich konnte mein Problem verdeutlichen :wink:
vg
Thomas

Hi,

Ich persönlich würde das über eine kleine .Net Funktion machen die die als CLR-Assembly eingebunden ist.

Ein TSQL Freak bekommt es vielleicht auch als SP hin, ich kenne aber keinen direkten Weg.

Es bleibt ja auch zu definieren welche Zahl du nimmst wenn es mehr als eine Lücke gibt. Die höchste oder die niedrigste oder eine dazwischen?

Wie enstehen denn die Lücken?
Wenn das was du da hast eine Identifizierung eines Artikels oder ähnliches ist, würde ich die Lücken entstandenen sowieso aus QS Gründen nie wieder benutzen.

Gruss
Joey

Hallo,

schnell zwischendurch:

Als Ansatz (mal anders herum): Gesucht wird die kleinste Zahl (Unterartikel-Nummer), für die es keine direkt nachfolgende Nummer gibt.

Also Minimum + 1

und wieder und wieder bis …

SQL kriegst du bestimmt hin, sonst noch mal posten.

mfg, tf

Hallo,

Diese Artikel haben eine Haupt- und eine
Unter-nummer. Zum Beispiel gibt es folgende Artiekl: 1-0; 1-1;
1-3; 1-4; 1-5 Die große Kunst besteht jetzt die nächst freie
Unterartikelnummer zu finden. In diesem Fall wäre das zuerst
die 1-2 und als nächstes die 1-6.

So ähnlich? (vorausgesetzt, es gibt schon mindestens einen Artikel mit der Hauptnr.)

select unternr + 1 as frei
from artikel a
where hauptnr = 1
and not exists (
 select \* from artikel
 where hauptnr = 1
 and unternr = a.unternr + 1
)
order by frei

Andreas

Hallo Thomas,

ein entsprechendes SQL-Statement findest Du unter http://www.familieverweyen.de/txt_0045.php.

MfG Georg V.

Hallo Georg,

super, genau das hab ich gesucht!!!

Danke
Thomas