Seite 1 von 1

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

Verfasst: Do, 23.08.2007 20:58
von Barlee
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

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

Verfasst: Do, 23.08.2007 21:58
von keyboard-billy
@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

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

Verfasst: Fr, 24.08.2007 11:23
von keyboard-billy
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

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

Verfasst: Di, 14.04.2009 20:19
von Barlee
Genauso! Die o.a. Lösung kannst Du 1:1 auf Deine Tabelle übertragen. Eindeutige Spalte ist (vermutlich) ID