zeilennummerierung in abfragen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

zeilennummerierung in abfragen

Beitrag von sibc »

als ziemlicher neuling habe ich eine wahrscheinlich für geübte nur unschwer zu beantwortende frage:

wie ergänzt man in openOffice(apache) eine abfrage um ein zusätzliches feld, das nur eine fortlaufende nummer, beginnend bei 1, anzeigt?

ich versuche eine datenbank für einen theaterverein zu erstellen, in dem es unter anderem tabellen für "teilnehmer", "teilnehmer eltern" "workshops" und "kurse" gibt, natürlich auch die nötigen zwischentabellen "teilnehmer_workshops", "teilnehmer_kurse"... u.s.f.

nun habe ich abfragen, die auch funktionieren(!) und mir zu den jeweiligen workshops resp. kursen, die angemeldeten teilnehmer (mit zusatzinfos wie telefon und email etc...) aufzeigen, diese abfragen basiern auf jeweils 4 tabellen: "Teilnehmer", Teilnehmer Eltern", "Teilnehmer_Workshops" und "Workshops".

in der sql unten fragte ich eben die teilnehmer für den workshop mit der ID 2 ab..., ich habe natürlich für jeden der workshops und der kurse eine derartige abfrage generiert!

SELECT "TEILNEHMER"."Name", "TEILNEHMER"."Vorname", "TEILNEHMER"."Geb.Datum", "TEILNEHMER ELTERN"."Telefon" AS "Telefon Eltern", "TEILNEHMER ELTERN"."Email" AS "Email Eltern", "TEILNEHMER"."Straße HausNr.|TürNr.", "TEILNEHMER"."Postleitzahl", "TEILNEHMER"."Land" FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER", "TEILNEHMER ELTERN" WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "TEILNEHMER"."Teilnehmer ID" AND "TEILNEHMER"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2 ORDER BY "TEILNEHMER"."Name" ASC

meine recherchen bezüglich des gewünschten nummernfeldes, das eben auf einen blick die aktuelle anzahl der zum workshop/zum kurs angemeldeten teilnehmer zeigen soll, führen mich immer auf "das database handbuch", das ich habe und liebe, zurück. und auf "donkarls.access-seiten" mit seinem stets zitierten 3.11 paragrafen
http://www.donkarl.com?FAQ3.11, die ich aber scheints nicht richtig umlege!?

meine ganz konkrete frage, meine bitte: WO MUSS ICH WAS GENAU IN MEINE SQL ANWEISUNG EINFÜGEN, DAMIT ICH DER ABFRAGE VORANGESTELLT EINE FORTLAUFENDE NUMMER ERHALTE...

damit wäre mir unheimlich geholfen...

DANKE IM VORRAUS!
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: zeilennummerierung in abfragen

Beitrag von RobertG »

Hallo sibc,

das Prinzip geht folgendermaßen:

Code: Alles auswählen

SELECT "ID", ( SELECT COUNT( "ID" ) FROM "Tabelle" WHERE "ID" <= "a"."ID" ) AS "lfdNr." FROM "Tabelle" AS "a"
Wenn Du nach einem Feld sortierst, so muss die Sortierung unverwechselbar sein. Eindeutige Werte liefert hier das Feld für den Primärschlüssel "ID".

Jetzt zu Deiner Abfrage:

Code: Alles auswählen

SELECT 
(SELECT COUNT("Name") FROM "TEILNEHMER" WHERE "Name" <= "a"."Name") AS "lfdNr.", 
"a"."Name", "a"."Vorname", "a"."Geb.Datum", "TEILNEHMER ELTERN"."Telefon" AS "Telefon Eltern", "TEILNEHMER ELTERN"."Email" AS "Email Eltern", "a"."Straße HausNr.|TürNr.", "a"."Postleitzahl", "a"."Land" 
FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" AS "a", "TEILNEHMER ELTERN" 
WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "a"."Teilnehmer ID" AND "a"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2 
ORDER BY "a"."Name" ASC
Dies kann allerdings dazu führen, dass gleiche Nummern bei gleichen Namen vergeben werden. Hier musst Du ggf. über die Sortierung nachjustieren:

Code: Alles auswählen

SELECT 
(SELECT COUNT("Name") FROM "TEILNEHMER" WHERE "Name"||"Teilnehmer ID" <= "a"."Name"||"a"."Teilnehmer ID") AS "lfdNr."
...
FROM ... "TEILNEHMER" AS "a" ...
WHERE ... "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "a"."Teilnehmer ID" ...
ORDER BY "a"."Name"||"a"."Teilnehmer ID" ASC

Gruß

Robert
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

danke! ich werde das alsbald testen! melde mich dann! gruß!
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

lieber robert,

nun hab ich das probiert, leider nicht mit erwünschtem ergebnis... ich erhalte zwar eine zusätzliche leiste mit lfdNr., die nummerierung folgt aber mir nicht nachvollziehbaren regeln.

übernehme ich deinen ersten sql befehl, erhalten ich bei meinen 2 testdatensätzen in der abfrage die nummern 2 und 7 als lfdNr.
im zweiten fall 2 idente nummern, nämlich 2 mal die 10.

hast du dafür eine erklärung?

ich habe deinen befehl wie folgt eingefügt:

SELECT ( SELECT COUNT( "Name" ) FROM "TEILNEHMER" WHERE "Name" <= "a"."Name" ) AS "lfdNr.", "a"."Name", "a"."Vorname", "a"."Geb.Datum", "TEILNEHMER ELTERN"."Telefon" AS "Telefon Eltern", "TEILNEHMER ELTERN"."Email" AS "Email Eltern", "a"."Straße HausNr.|TürNr.", "a"."Postleitzahl", "a"."Land" FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" AS "a", "TEILNEHMER ELTERN" WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "a"."Teilnehmer ID" AND "a"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2 ORDER BY "a"."Name" ASC

herzlichst, sibc
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: zeilennummerierung in abfragen

Beitrag von RobertG »

Hallo sibc,

Rik machte mich gerade darauf aufmerksam, dass die Nummerierung so nicht korrekt funktioniert, da die korrelierende Abfrage nicht die gleichen Bedingungen mit bekommt, die die äußere Abfrage hat. Entsprechend komplizierter muss die Unterabfrage sein:

Code: Alles auswählen

SELECT
(SELECT 
COUNT("TEILNEHMER"."Name") 
FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" , "TEILNEHMER ELTERN" 
WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "TEILNEHMER"."Teilnehmer ID" AND "TEILNEHMER"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2 AND "TEILNEHMER"."Name" <= "a"."Name") AS "lfdNr.",
"a"."Name", "a"."Vorname", "a"."Geb.Datum", "TEILNEHMER ELTERN"."Telefon" AS "Telefon Eltern", "TEILNEHMER ELTERN"."Email" AS "Email Eltern", "a"."Straße HausNr.|TürNr.", "a"."Postleitzahl", "a"."Land"
FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" AS "a", "TEILNEHMER ELTERN"
WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "a"."Teilnehmer ID" AND "a"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2
ORDER BY "a"."Name" ASC
Damit ist die gesamte Bedingung aus der äußeren Abfrage auch in der korrelierenden Unterabfrage enthalten. Einfacher wäre so etwas bei so vielen verschiedenen Bezügen, wenn Du eine Beispieldatenbank anhängen würdest - so kann ich immer nur hoffen, etwas nicht übersehen zu haben.

Gruß

Robert
Zuletzt geändert von RobertG am So, 22.02.2015 11:25, insgesamt 1-mal geändert.
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

lieber robert!

ich denke, ich weiß jetzt, woran das liegt. die lfdNr. 2 und 7 ist richtig wenn ich die der abfrage zugrunde liegende tabelle in ihrer gesamtheit betrachte... wenn ich da durchzähle, stehen meine datensätze der abfrage dort tatsächlich an 2. und 7. stelle...
das allerdings interessiert mich nicht.
es sollen nur die in der abfrage stehenden datensätze durchnummeriert werden, startend mit 1. das würde mir auf einen blick ersichtlich machen, wieviele teilnehmer der workshop zum jeweiligen abfragezeitpunkt hat.

danke für deine geduld. ich hoffe, ich habe mich klar ausgedrückt.

gruß
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

jetzt haben sich unsere posts überschnitten... muss erst lesen. (und daneben eigentlich schon ans kochen denken...) :? danke...
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

sehr gerne hänge ich dir eine beispieldatenbank an, wahrscheinlich ist das alles sehr anfängerlike...

in den abfragen findest du nun dreimal kopiert meine ursprüngliche... als test, test1, test2 mit deinen sql befehlen...
dataTEST.odb
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

auch der letztgesandte sql befehl liefert mir das gleiche ergebnis wie der erste... leider. wollte ich nur noch sagen.

lieben gruß sibc
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: zeilennummerierung in abfragen

Beitrag von RobertG »

Hallo sibc,

habe jetzt von Rik die Datenbank erhalten. Er hatte dort mit einem etwas anderen Code das entsprechende Ergebnis erhalten.
ich habe den Code in meinem vorherigen Post angepasst. Die Unterabfrage hattte noch den Alias "a" an manchen Stellen. jetzt funktioniert die gesamte Abfrage wie gewünscht.

Gruß

Robert
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

TAUSEND DANK! es funktioniert!!!
(hoffentlich gelingt es, hinfort bei allen abfragen, diesen befehl richtig einzusetzten... :wink:)

ein kleines problem noch: bei gleichen (nach)namen (z.b. bei geschwisterkindern) vergibt die abfrage 2 gleiche nummern, ich muss also als 2. parameter den vornamen einfügen... ich versuchte deinen ursprünglichen 2. befehl mit der "ID" umzulegen ... es klappte nicht leider. dürfte ich nochmals um deine hilfe bitten?

mit grüßen aus wien!

sibc
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: zeilennummerierung in abfragen

Beitrag von RobertG »

Hallo sibc,

versuche einmal das Folgende:

Code: Alles auswählen

SELECT
(SELECT
COUNT("TEILNEHMER"."Name")
FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" , "TEILNEHMER ELTERN"
WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "TEILNEHMER"."Teilnehmer ID" AND "TEILNEHMER"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2 AND "TEILNEHMER"."Name"||"TEILNEHMER"."Vorname" <= "a"."Name"||"a"."Vorname") AS "lfdNr.",
"a"."Name", "a"."Vorname", "a"."Geb.Datum", "TEILNEHMER ELTERN"."Telefon" AS "Telefon Eltern", "TEILNEHMER ELTERN"."Email" AS "Email Eltern", "a"."Straße HausNr.|TürNr.", "a"."Postleitzahl", "a"."Land"
FROM "TEILNEHMER_WORKSHOPS", "WORKSHOPS", "TEILNEHMER" AS "a", "TEILNEHMER ELTERN"
WHERE "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = "WORKSHOPS"."Workshop ID" AND "TEILNEHMER_WORKSHOPS"."Teilnehmer ID_f" = "a"."Teilnehmer ID" AND "a"."Teilnehmer Eltern ID_f" = "TEILNEHMER ELTERN"."Teilnehmer Eltern ID" AND "TEILNEHMER_WORKSHOPS"."Workshop ID_f" = 2
ORDER BY "a"."Name"||"a"."Vorname" ASC
Ist dann immer noch nicht eindeutig (wir hatten im Sportverein 2 Personen, die mit Vornamen und Nachnamen identisch waren - nicht verwandt; die wurde auch im Gespräch mit W...1 und W...2 bezeichnet), aber gegebenenfalls kann ja auch das Schlüsselfeld angehängt werden.

Gruß

Robert
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

FANTASTISCH!!!! RIESENDANK!
ganz glücklich bin ich dann, wenn ich das auch exakt verstehe warum das so funktioniert, aber das ist nun meine denknuss. schönen abend noch!

sibc
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: zeilennummerierung in abfragen

Beitrag von F3K Total »

Hallo sibc,
ich habe dieses Thema mitverfolgt, du siehst, laufende Nummern sind mit Base nicht gerade einfach umzusetzen.
Nur eine Idee:
Wolltest du eigentlich nur wissen, wieviele Teilnehmer ein Workshop hat?
Wenn ja, versuch mal diese etwas einfachere Abfrage:

Code: Alles auswählen

SELECT
    "Workshop ID_f",
    "Bezeichnung",
    COUNT( * ) AS "Teilnehmerzahl"
FROM
    "WORKSHOPS"
LEFT JOIN
    "TEILNEHMER_WORKSHOPS"
ON
    "Workshop ID" = "Workshop ID_f" 
GROUP BY
    "Bezeichnung",
    "Workshop ID_f"
Gruß R
sibc
*
Beiträge: 15
Registriert: Sa, 21.02.2015 23:04

Re: zeilennummerierung in abfragen

Beitrag von sibc »

liebe dank für diesen input! und ich werde auch diesen testen!!! nur nicht mehr heute... (ich bin überhaupt sehr angetan von der prompten hilfe, die einem hier zuteil wird!)

ich wollte die laufnummer allerdings haben, weil ich zugleich mit der teilnehmerliste (namen incl. relevanten daten) auch die anzahl der teilnehmer auf einen blick haben möchte... und wie ich sehe, es funktioniert!

gruß!
Antworten