Zaehler in Abfrage
Moderator: Moderatoren
Zaehler in Abfrage
hier viewtopic.php?f=8&t=16160&hilit=abfrage+z%C3%A4hlerist schon mal das Thema mit einem Zähler in einer Abfrage behandelt worden, leider bekomme ich es nicht auf meinen Fall angewendet. Ich hoffe es ist richtig das ich ein neues Thema begonnen habe und meine Frage nicht dort angehängt habe?
Ich möchte in einer Abfrage für das Feld "factory_ID" aus meiner Tabelle eine Nummerierung erzeugen die bei jeder neuen "factory_ID" mit 0 beginnt. Das Ergebnis sollte so wie in dem Screenshot unter Input_Good_Nr in rot dargestellt aussehen. Geht so etwas überhaupt? und wenn ja wie?
Ich möchte in einer Abfrage für das Feld "factory_ID" aus meiner Tabelle eine Nummerierung erzeugen die bei jeder neuen "factory_ID" mit 0 beginnt. Das Ergebnis sollte so wie in dem Screenshot unter Input_Good_Nr in rot dargestellt aussehen. Geht so etwas überhaupt? und wenn ja wie?
- Dateianhänge
-
- Nummerierung.png (11.3 KiB) 3454 mal betrachtet
Re: Zaehler in Abfrage
Ich nehme an, dass du den Zähler nicht innerhalb der Abfrage, sondern innerhalb des Berichts haben möchtest. (Innerhalb einer Abfrage ist das - wenn überhaupt - nur mit sehr großen Verrenkungen möglich.) Im Bericht geht das über Funktionen, wobei die folgende Kurzanleitung sich auf den Oracle Report Builder bezieht.
- Aktiviere den Berichts-Navigator.
- Wähle (mit Rechtsklick) innerhalb der Gruppe, die durchnummeriert werden soll, eine "Neue Funktion".
- Öffne die Eigenschaften dazu.
- Ändere den Namen, z.B. in: Zaehler_je_factory
- Trage die Formel ein (jetzt mit eckigen Klammern):
[Zaehler_je_factory] + 1 - Lege den Anfangswert fest als 0 oder -1. (Ich vergesse immer wieder, ob die Formel bereits beim ersten Datensatz ausgewertet wird oder erst beim zweiten.)
- Das Feld, das den Zähler anzeigen soll, erhält in den Eigenschaften den Typ "Benutzerdefinierte Funktion" mit Auswahl dieser Funktion.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Zaehler in Abfrage
Hallo Jürgen,
leider brauche ich den Zähler schon vor dem Bericht. Geht es vielleicht auch im Formular und einer neuen Spalte in der Tabelle InputGood, so das ich jedes mal wenn ich ein zusätzliche InputGood auswähle NR. um eins hochgesetzt wird?
leider brauche ich den Zähler schon vor dem Bericht. Geht es vielleicht auch im Formular und einer neuen Spalte in der Tabelle InputGood, so das ich jedes mal wenn ich ein zusätzliche InputGood auswähle NR. um eins hochgesetzt wird?
- Dateianhänge
-
- Tabelle.png (12.06 KiB) 3445 mal betrachtet
-
- Formular.png (85.32 KiB) 3445 mal betrachtet
Re: Zaehler in Abfrage
Wirklich? Geht das nicht auch durch ein geeignetes ORDER BY? Das vermeidet Klimmzüge und Umwege sowie doppelte Berechnungen.Geotrans hat geschrieben:leider brauche ich den Zähler schon vor dem Bericht.
Ja, es geht über ein Makro. Hole die letzte laufende Nummer durch:Geotrans hat geschrieben:Geht es vielleicht auch im Formular und einer neuen Spalte in der Tabelle InputGood, so das ich jedes mal wenn ich ein zusätzliche InputGood auswähle NR. um eins hochgesetzt wird?
Code: Alles auswählen
SELECT MAX("NR")
FROM "factory"
WHERE /* mit den passenden Bedingungen, welcher Bereich gezählt werden soll */
Code: Alles auswählen
oForm.updateInt(6, inZaehler + 1)
Ich bin zurzeit dabei, das Kapitel "Makros" im Handbuch um einleitende Abschnitte zu erweitern, wo diese Schritte (SQL-Befehl einbauen, Werte abfragen, Werte eintragen) erläutert werden. Wenn es nötig ist, dann melde dich per PN (vorzugsweise mit einer Email-Adresse) bei mir, damit ich dir den aktuellen Entwurf der odt-Datei (ca. 360 kB) schicken kann.
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Zaehler in Abfrage
Hallo Georg,
sieh Dir einmal im Handbuch das Kapitel "Zeilennummerierung" an. Das erstellt eine Nummerierung, gegebenenfalls auch eben gruppiert nach weiteren Begriffen.
Geht nach folgendem Schema:
Gruß
Robert
sieh Dir einmal im Handbuch das Kapitel "Zeilennummerierung" an. Das erstellt eine Nummerierung, gegebenenfalls auch eben gruppiert nach weiteren Begriffen.
Geht nach folgendem Schema:
Code: Alles auswählen
SELECT "ID",
( SELECT COUNT( "ID" ) FROM "Tabelle" WHERE "ID" <=
"a"."ID" AND "factory_ID" = "a"."factory_ID" ) AS "Nr."
FROM
"Tabelle" AS "a"
Robert
Re: Zaehler in Abfrage
Hallo Robert,
funktioniert super! Hatte übrigens bei dem Absatz Zeilennummerierung im Handbuch auch schon den Verdacht, das hier die Lösung für mein Problem liegt. Hatte es aber nicht umgesetzt bekommen, bin halt noch ein totaler Anfänger! (Ich finde es im Handbuch übrigens immer eine große Hilfe wenn ich solche Beispiele dann auch in der Beispieldatenbank anschauen kann.)
Bei der Nummerierung ist der kleinste Wert 1. Ich brauche aber 0. Mache ich einfach über eine Berechnung?
funktioniert super! Hatte übrigens bei dem Absatz Zeilennummerierung im Handbuch auch schon den Verdacht, das hier die Lösung für mein Problem liegt. Hatte es aber nicht umgesetzt bekommen, bin halt noch ein totaler Anfänger! (Ich finde es im Handbuch übrigens immer eine große Hilfe wenn ich solche Beispiele dann auch in der Beispieldatenbank anschauen kann.)
Bei der Nummerierung ist der kleinste Wert 1. Ich brauche aber 0. Mache ich einfach über eine Berechnung?
Re: Zaehler in Abfrage
Hallo Georg,
0 erhältst Du durch eine einfache Korrektur:
Gruß
Robert
0 erhältst Du durch eine einfache Korrektur:
Code: Alles auswählen
SELECT "ID",
( SELECT COUNT( "ID" )-1 FROM "Tabelle" WHERE "ID" <=
"a"."ID" AND "factory_ID" = "a"."factory_ID" ) AS "Nr."
FROM
"Tabelle" AS "a"
Robert
Re: Zaehler in Abfrage
Ganz Herzlichen Dank!!! 

Re: Zaehler in Abfrage
Ist es möglich für diese Abfrage (siehe Screenshot) zwei Nummerierung zu erstellen, einmalRobertG hat geschrieben:Code: Alles auswählen
SELECT "ID", ( SELECT COUNT( "ID" )-1 FROM "Tabelle" WHERE "ID" <= "a"."ID" AND "factory_ID" = "a"."factory_ID" ) AS "Nr." FROM "Tabelle" AS "a"
Code: Alles auswählen
ID=ID_I
Code: Alles auswählen
ID=ID_O
Habe auch schon probiert die Abfragen einzeln zu nummerieren und dann mit UNION zusammenzufügen. Die Nummerierten Abfragen als View abspeichern geht nicht.
Die Abfragen wie hier viewtopic.php?f=8&t=61120#p228060 beschrieben zusammenzufügen bekomme ich mit Nummerierung auch nicht hin!
Mein Versuch:
Code: Alles auswählen
SELECT * FROM (SELECT "ID", "Good_ID", "InputFactor", "InputCapacity", "InputSupplier", "factory_ID", ( SELECT COUNT( "ID" ) - 1 FROM "InputGood" WHERE "ID" <= "a"."ID" AND "factory_ID" = "a"."factory_ID" ) AS "NR" FROM "InputGood" AS "a") UNION SELECT * FROM (SELECT "ID", "Good_ID", "OutputFactor", "OutputCapacity", "factory_ID", ( SELECT COUNT( "ID" ) - 1 FROM "OutputGood" WHERE "ID" <= "a"."ID" AND "factory_ID" = "a"."factory_ID" ) AS "NR" FROM "OutputGood" AS "a")
- Dateianhänge
-
- Nummerierung2.png (20.23 KiB) 3304 mal betrachtet
Re: Zaehler in Abfrage
Bitte entschuldige, dass ich nicht mehr durchblicke (und mich deshalb weitgehend raushalte). Aber dein Screenshot für das Auswahlergebnis deutet auf folgende Möglichkeit hin: Trage für jede Spalte aus allen UNION-Teilen einen Spalten-Alias ein, z.B.
Ich hatte bei einer eigenen UNION innerhalb von Base schon einmal den Verdacht, dass der SQL-Parser von Base hier vom SQL-Standard abweicht. Normalerweise werden bei UNIONs die Spaltennamen des ersten SELECT auch für die weiteren SELECTs übernommen. Base oder HSQL setzt unterschiedliche Spaltennamen ein: ID_1 gegenüber ID_0.
Vielleicht hilft's. Gruß Jürgen
Code: Alles auswählen
SELECT "ID", /* ersetzen durch */
SELECT "ID" AS "ID",
Vielleicht hilft's. Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Zaehler in Abfrage
Hallo Jürgen,
leider steige ich überhaupt noch nicht durch, deshalb fällt es mir auch sehr schwer meine Fragen einigermaßen verständlich zu formulieren. ID_I und ID_O müssen zwei verschiedene Felder sein, ist also gewollt. Mein Problem ist, glaube ich zumindest, das ich jetzt keinen Primärschlüssel mehr habe.
leider steige ich überhaupt noch nicht durch, deshalb fällt es mir auch sehr schwer meine Fragen einigermaßen verständlich zu formulieren. ID_I und ID_O müssen zwei verschiedene Felder sein, ist also gewollt. Mein Problem ist, glaube ich zumindest, das ich jetzt keinen Primärschlüssel mehr habe.
Re: Zaehler in Abfrage
Hallo Geotrans,
wenn Du zwei Tabellen mit "Union" verbinden willst, dann müssen die abgefragten Felder die gleichen Bezeichnungen und vor allem die gleichen Feldeigenschaften haben. Sonst passiert das, was bei deiner Zusammenstellung passiert: Die Tabellen werden aneinandergehängt und die jeweils fehlenden Felder erhalten den Wert "NULL".
Du kannst Źähler unabhängig voneinander laufen lassen. Das hängt damit zusammen, dass Du bestimmte Felder zu den Bedingungsfeldern des Zählers machst.
Beispiel: Kontoauszüge. Die Kontoauszüge sind für ein jahr komplett durchnummeriert. Die Nummerierung wird bei jedem Druck erhöht. Eine zweite Nummerierung zählt nur die Blätter innerhalb eines Druckes. Ähnliches geht auch in Abfragen.
Für Deine Konstruktion aber gilt: Du fragst in dem ersten Teil die Tabelle "InputGood" ab, im zweiten Teil die Tabelle "OutputGood". Und da funktioniert ein ordentliches "Union" gar nicht, weil es sich um völlig verschiedene Felder handelt.
Gruß
Robert
wenn Du zwei Tabellen mit "Union" verbinden willst, dann müssen die abgefragten Felder die gleichen Bezeichnungen und vor allem die gleichen Feldeigenschaften haben. Sonst passiert das, was bei deiner Zusammenstellung passiert: Die Tabellen werden aneinandergehängt und die jeweils fehlenden Felder erhalten den Wert "NULL".
Du kannst Źähler unabhängig voneinander laufen lassen. Das hängt damit zusammen, dass Du bestimmte Felder zu den Bedingungsfeldern des Zählers machst.
Beispiel: Kontoauszüge. Die Kontoauszüge sind für ein jahr komplett durchnummeriert. Die Nummerierung wird bei jedem Druck erhöht. Eine zweite Nummerierung zählt nur die Blätter innerhalb eines Druckes. Ähnliches geht auch in Abfragen.
Für Deine Konstruktion aber gilt: Du fragst in dem ersten Teil die Tabelle "InputGood" ab, im zweiten Teil die Tabelle "OutputGood". Und da funktioniert ein ordentliches "Union" gar nicht, weil es sich um völlig verschiedene Felder handelt.
Gruß
Robert
Re: Zaehler in Abfrage
Hallo Robert,RobertG hat geschrieben: wenn Du zwei Tabellen mit "Union" verbinden willst, dann müssen die abgefragten Felder die gleichen Bezeichnungen und vor allem die gleichen Feldeigenschaften haben. Sonst passiert das, was bei deiner Zusammenstellung passiert: Die Tabellen werden aneinandergehängt und die jeweils fehlenden Felder erhalten den Wert "NULL".
Du kannst Źähler unabhängig voneinander laufen lassen. Das hängt damit zusammen, dass Du bestimmte Felder zu den Bedingungsfeldern des Zählers machst.
Beispiel: Kontoauszüge. Die Kontoauszüge sind für ein jahr komplett durchnummeriert. Die Nummerierung wird bei jedem Druck erhöht. Eine zweite Nummerierung zählt nur die Blätter innerhalb eines Druckes. Ähnliches geht auch in Abfragen.
Für Deine Konstruktion aber gilt: Du fragst in dem ersten Teil die Tabelle "InputGood" ab, im zweiten Teil die Tabelle "OutputGood". Und da funktioniert ein ordentliches "Union" gar nicht, weil es sich um völlig verschiedene Felder handelt.
das in die Felder Null enthalten ist beabsichtigt. Was ich in dem Beispiel noch nicht hatte, war ein gemeinsames Feld über das ich nachher für die Zuordnung nutzen kann. Nach mehren Unions sieht meine Abfrage jetzt so aus wie bei Union1.png.
Das sind die IDs aller Unterformulare.Über diese kann ich jetzt die anderen Felder der Unterformulare zuordnen (Union2.png). Wenn ich daraus einen Bericht erstelle bekomme ich ein einigermaßen brauchbares Ergebniss mit ein paar kleinen Schönheitsfehlern. Mehr dazu in diesem neuen Thread:viewtopic.php?f=8&t=61134#p228117
- Dateianhänge
-
- union2.png (65.36 KiB) 3244 mal betrachtet
-
- union1.png (13.4 KiB) 3244 mal betrachtet