Laufende Nummer mit SQL-Abfrage generieren möglich?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Gast

Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von Gast » Do, 23.08.2007 16:47

Hallo Leutz,

ist es möglich innerhalb einer Auswahlabfrage mittels SQL (...ich verwende die interne HSQLDB) ein Feld mit einer laufenden Nummer zu erzeugen?

Ergebnis sollte etwa so aussehen:

Code: Alles auswählen

Lfd. Nr. | Titel                               | Komponist               | Ausgewählt
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1        |Die kleine Nachtmusik                |Mozart                   |true
2        |Knockin' on heaven's door            |Bob Dylan                |true
3        |Macho - Macho                        |Reinhard Fendrich        |true
Meine Abfrage sieht momentan etwa so aus:

Code: Alles auswählen

SELECT "Titel", "Komponist", "Ausgewählt"
FROM "Repertoire"
WHERE "Ausgewählt = TRUE;
Wie kann man in so eine Abfrage die Generierung einer laufende Nummer mit einbauen?

Greets,
Billy

Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von Barlee » Do, 23.08.2007 20:58

Hallo Billy,

folgender Ansatz funktioniert, solange keine gleichen Titelnamen vorkommen.
Wenn Du in Deiner Tabelle "Repertoire" einen eindeutigen Schlüssel hast, dann setze diesen an Stelle von Titel ein.

Code: Alles auswählen

select
(Select Count (*) FROM Repertoire as X WHERE X.Titel < Repertoire.Titel)+1 as lfd,
Titel,
Komponist,
ausgewaehlt
from Repertoire
Gruss Barlee

keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Re: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von keyboard-billy » Do, 23.08.2007 21:58

@Barlee

Herzlichen Dank für Deinen Lösungsansatz :D . Ich habe nun meine Abfrage angepasst. Deinen Vorschlag mit dem eindeutigen Schlüssel habe ich mit berücksichtigt. Die Abfrage sieht nun folgendermaßen aus:

Code: Alles auswählen

SELECT
( SELECT COUNT( * ) FROM "Repertoireliste" AS "X" WHERE "X"."ID" < "Repertoireliste"."ID" ) + 1 AS "Nr.", "GEMA-Werk.-Nr", "P/F", "Titel", "Komponist", "Bearbeiter", "Verleger"
FROM "Repertoireliste"
WHERE "In GEMA Musikfolge aufnehmen" = TRUE;
Es resultiert nun ein völlig neues Problem daraus:
Die letzte Zahl im Feld "Nr." entspricht der Nummer aus dem Feld "Repertoireliste"."ID". ("Repertoireliste"."ID" ist auch der eindeutige Schlüssel.)

Die Ausgabe im Feld "Nr." sieht nun folgendermaßen aus:

Code: Alles auswählen

Nr. | .....
- - - - - -
1   | .....
2   | .....
3   | .....
14  | .....
Mit der WHERE-Klausel selektiere ich natürlich mit "Lücken" im Feld "Repertoireliste"."ID".
Der letzte Datensatz hat tatsächlich die Nummer 14 im Feld "Repertoireliste"."ID", müsste aber in der neu generierten laufenden Nummer "Nr." richtigerweise die Nummer 4 haben.

Ich muss gestehen, dass ich Deinem Code Schwierigkeiten mit der Interpretation habe :oops: . Speziell die Anweisung

Code: Alles auswählen

( SELECT COUNT( * ) FROM "Repertoireliste" AS "X" WHERE "X"."ID" < "Repertoireliste"."ID" ) + 1 AS "Nr."
verstehe ich nicht. Vielleicht bist Du so nett und kannst mir erklären, wie das von der Datenbank behandelt wird.

Die Anweisung

Code: Alles auswählen

SELECT COUNT ( * ) FROM "Repertoireliste" AS "X"; 
zählt ja alle Datensätze und gibt sie in ein neues Feld "X" aus. Aber was es mit "X"."ID" auf sich hat verstehe ich leider noch nicht :?: .

Gruss,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!

keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

GELÖST: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von keyboard-billy » Fr, 24.08.2007 11:23

Hi Leutz,

wie ich bereits geschrieben habe, ist mein Ziel mittels SQL-Abfrage einen Autowert (Laufende Nummer) zu generieren.
Was ich anfangs nicht mit erwähnt habe :oops: : Die Abfrage enthält in meinem Fall auch eine Bedingung.

Zunächst zur Tabelle, auf die die Abfrage angewendet werden soll; sie sieht folgendermaßen aus:

Code: Alles auswählen

CREATE TABLE "Repertoireliste"(
 "ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,
 "P/F" VARCHAR(1),
 "In GEMA Musikfolge aufnehmen" BOOLEAN DEFAULT FALSE,
 "Titel" VARCHAR(255) NOT NULL,
 "GEMA-Werk.-Nr" VARCHAR(20),
 "Komponist" VARCHAR(255),
 "Bearbeiter" VARCHAR(255),
 "Verleger" VARCHAR(255)
);
Bedingung der Abfrage soll sein, dass Alle Werte der Tabelle "Repertoireliste" angezeigt werden, bei denen der Wert des Feldes "In GEMA Musikfolge aufnehmen" TRUE ist.
Gleichzeitig soll ein neues Feld "Nr." im Abfrageergebnis enthalten sein, was die besagte "Laufende Nummer" enthält.

Ich habe nun dazu mit der gestrigen Anregung von Barlee folgende Lösung des Problems erarbeitet :idea: :

Code: Alles auswählen

SELECT (SELECT COUNT("ID") FROM "Repertoireliste" AS "X"
        WHERE (("X".ID <="Y"."ID") AND ("X"."In GEMA Musikfolge aufnehmen" = TRUE ))) 
 AS "NR.","GEMA-Werk.-Nr","P/F","Titel","Komponist","Bearbeiter","Verleger"
 FROM "Repertoireliste" AS "Y"
 WHERE (("In GEMA Musikfolge aufnehmen" = TRUE))
 ORDER BY "NR.";
Ganz wichtig dabei: Die Bedingung muss in der Hauptabfrage UND (!!!) in der Subabfrage enthalten sein.

Vielleicht hat ja der/die eine oder andere eine Verwendung dafür :D ? Würde mich jedenfalls freuen....

Greets,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!

bernd222

Re: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von bernd222 » Di, 14.04.2009 19:35

und wie sähe das mit einer Tabelle aus wie diese?
Auftragsnummer,Umzugstermin,ID,Kunde,Lfd.Nr.,

Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von Barlee » Di, 14.04.2009 20:19

Genauso! Die o.a. Lösung kannst Du 1:1 auf Deine Tabelle übertragen. Eindeutige Spalte ist (vermutlich) ID

jojotempler

Re: Laufende Nummer mit SQL-Abfrage generieren möglich?

Beitrag von jojotempler » So, 06.05.2012 13:59

hab eine ähnliche problematik. mit dem hinweis hat alles gefunzt.
danke

Smitha382

John

Beitrag von Smitha382 » Sa, 21.04.2018 17:01

cheers for the actual article i've recently been on the lookout with regard to this kind of advice on the net for sum time proper now so numerous thanks cebdbdgabkdededk

Gesperrt