Filtern von Datensätzen
Moderator: Moderatoren
Filtern von Datensätzen
Hallo!
In meiner Datenbank ist eine Tabelle, deren Primärschlüssel aus den Feldern "Id"[INTEGER] und "Jahr" INTEGER] besteht.
Wird es möglich sein, anhand dieser beiden Felder die Datensätze z.B. von 1240/2013 bis 50/2014 herauszufilten?
Gruß
Przemek
In meiner Datenbank ist eine Tabelle, deren Primärschlüssel aus den Feldern "Id"[INTEGER] und "Jahr" INTEGER] besteht.
Wird es möglich sein, anhand dieser beiden Felder die Datensätze z.B. von 1240/2013 bis 50/2014 herauszufilten?
Gruß
Przemek
Re: Filtern von Datensätzen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Filtern von Datensätzen
Viel Erfolg
Gruß R
Gruß R
Zuletzt geändert von F3K Total am So, 12.01.2014 22:47, insgesamt 1-mal geändert.
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Filtern von Datensätzen
Vielen Dank für die Antwort, aber ich habe mich nicht genau ausgedrückt. Die Nummern in der Spalte "Id" wiederholen sich. z. B. 1, 2, 3 ... 1254 (für das Jahr 2013) und dann wieder 1, 2, 3... (für das Jahr 2014), deswegen besteht der Primärschlüssel aus 2 Feldern. Ist es in dieser Situation überhaupt möglich, in der Abfrage einen Bereich "von-bis" zu setzen, oder wäre es sinvoll, eine Spalte hinzuzüfügen, die alleine als Primärschlüssel dienen soll (Die bestehdenden Spalten "Id" und "Jahr" musss ich sowieso behalten für die Zwecke der Auftragsnummerierung).
Gruß
Przemek
Gruß
Przemek
Re: Filtern von Datensätzen
Hallo Przemek,
vielleicht hilft Dir so eine Lösung:
Du beschränkst mit der Unterabfrage erst einmal die Werte (Tabelle "b") von unten her und schreibst dann in die eigentliche Abfrage für die Tabelle "a" die obere Grenze.
Gruß
Robert
vielleicht hilft Dir so eine Lösung:
Code: Alles auswählen
SELECT "a"."ID", "a"."Jahr"
FROM
"Test" AS "a",
(SELECT "ID", "Jahr" FROM "Test" WHERE ("ID" > '1239' AND "Jahr" > '2012') OR "Jahr" > '2013') AS "b"
WHERE
"a"."ID" = "b"."ID"
AND "a"."Jahr" = "b"."Jahr"
AND ("a"."ID" < '51' OR "a"."Jahr" < '2014')
Gruß
Robert
Re: Filtern von Datensätzen
Hi,
warum filterst du nicht einfach nach dem Datum?
Gruß R
warum filterst du nicht einfach nach dem Datum?
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Filtern von Datensätzen
@ Robert:
Und wenn ich Daten aus 3 oder 4 Jahren brauche, dann brauche ich eine andere Abfrage. Die lässt sich nicht so einfach mit Variaablen füllen, oder?
@R:
GRuß
Przemek
Und wenn ich Daten aus 3 oder 4 Jahren brauche, dann brauche ich eine andere Abfrage. Die lässt sich nicht so einfach mit Variaablen füllen, oder?
@R:
Das ist eine gute Lösung, wenn ich Datensätze vom (Datum) bis zum(Datum) herausfiltern will, aber an einem Tag gibt es meistens mehrere Aufträge.warum filterst du nicht einfach nach dem Datum?
GRuß
Przemek
Re: Filtern von Datensätzen
Moin,
Du hast mehr als genügend Beispiele und Anregungen, sogar Lösungen für DEINE Datenbank bekommen.
Versuche erstmal zu verstehen, was dir an die Hand gegeben wurde, bevor du uns mit weiteren Fragen löcherst.
R
Cyklista hat geschrieben:Vielen Dank für die Antwort, aber ich habe mich nicht genau ausgedrückt.
Bin ich hier im Kindergarten?Cyklista hat geschrieben:aber an einem Tag gibt es meistens mehrere Aufträge.
Du hast mehr als genügend Beispiele und Anregungen, sogar Lösungen für DEINE Datenbank bekommen.
Versuche erstmal zu verstehen, was dir an die Hand gegeben wurde, bevor du uns mit weiteren Fragen löcherst.
R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Filtern von Datensätzen
Sorry!
Du brauchst aber nicht antworten, wenn Du nicht willst.
Du brauchst aber nicht antworten, wenn Du nicht willst.
Re: Filtern von Datensätzen
Hallo Przemek,
Die Tabelle "Filter" hat nur einen Datensatz. Darin befinden sich die Felder "Integer1", "Jahr1", "Integer2", "Jahr2".
Gruß
Robert
Code: Alles auswählen
SELECT "a"."ID", "a"."Jahr"
FROM
"Test" AS "a",
(SELECT "ID", "Jahr" FROM "Test" WHERE ("ID" > (SELECT "Integer1" FROM "Filter") AND "Jahr" > (SELECT "Jahr1" FROM "Filter")) OR "Jahr" > (SELECT "Jahr1" FROM "Filter")+1) AS "b"
WHERE
"a"."ID" = "b"."ID"
AND "a"."Jahr" = "b"."Jahr"
AND ("a"."ID" < (SELECT "Integer2" FROM "Filter") OR "a"."Jahr" < (SELECT "Jahr2" FROM "Filter"))
Gruß
Robert
Re: Filtern von Datensätzen
Vielen Dank für die Antwort.
Irgendwas passt da aber nicht, vielleicht habe ich irgendwo einen Fehler gemacht ?
In die zwei ersten Felder habe ich die Anfangsnummer eingetragen und in die anderen zwei - die Endnummer.
In der Abfrage habe ich "Test" gegen "Auftraege" getauscht.
Die Abfrage zeigt aber nur zwei leere Felder ("ID" und "Jahr") an.
Ich habe mir überlegt, ob man in der Abfrage die Funktion "CONCAT_WS" nutzen könnte (falls diese unter LO überhaupt funktioniert), sodass man die Felder "Jahr" und "ID" zum Format "Jahr/ID" zusammenführt. Dann würden sich die Werte zB. 2013/253 und 2014/5 vergleichen lassen. Mit der Abfrage selbst würde ich es schon igredwie hinkrigen, ich weiß aber nicht, wie man das Zeichen "/" einfügt. Ich habe versucht
aber das funktioniert nicht.
Sollte das nicht gehen, dann:
Dabei müsste ich bei den Eigneschaften des feldes "ID" 3 oder 4 führende Nullen einfügen, sodass ich das Ergebnis 20130253, bzw. 20140005 bekomme.
Die Abfrage :
funktioniert "fast" richtig, die führenden Nullen aus dem Feld "Id" werden aber weggelassen und das Ergebnis ist fehlerhaft.
Ist die Richtung überhaupt sinnvoll?
Gruß
Przemek
Irgendwas passt da aber nicht, vielleicht habe ich irgendwo einen Fehler gemacht ?
Also die Tabelle "Filter" hat insgesamt 5 Spalten: "Id" als BOLEAN (Primärschlüssel), "Integer1", "Jahr1", "Integer2", "Jahr2" als INTEGER.Die Tabelle "Filter" hat nur einen Datensatz. Darin befinden sich die Felder "Integer1", "Jahr1", "Integer2", "Jahr2".
In die zwei ersten Felder habe ich die Anfangsnummer eingetragen und in die anderen zwei - die Endnummer.
In der Abfrage habe ich "Test" gegen "Auftraege" getauscht.
Die Abfrage zeigt aber nur zwei leere Felder ("ID" und "Jahr") an.
Ich habe mir überlegt, ob man in der Abfrage die Funktion "CONCAT_WS" nutzen könnte (falls diese unter LO überhaupt funktioniert), sodass man die Felder "Jahr" und "ID" zum Format "Jahr/ID" zusammenführt. Dann würden sich die Werte zB. 2013/253 und 2014/5 vergleichen lassen. Mit der Abfrage selbst würde ich es schon igredwie hinkrigen, ich weiß aber nicht, wie man das Zeichen "/" einfügt. Ich habe versucht
Code: Alles auswählen
SELECT CONCAT_WS("/","Jahr", "ID")
Sollte das nicht gehen, dann:
Code: Alles auswählen
SELECT CONCAT("Jahr", "ID")
Die Abfrage :
Code: Alles auswählen
SELECT "ID", "Jahr", CONCAT( "Jahr", "ID" ) AS "AuftrNr" FROM "Auftraege" WHERE "AuftrNr" >= 20130001 AND "AuftrNr" <= 20140002
Ist die Richtung überhaupt sinnvoll?
Gruß
Przemek
Re: Filtern von Datensätzen
Hallo Przemek,
wenn Du Felder miteinander koppeln willst, dann kannst Du bei mehreren Feldern folgendermaßen (für die HSQLDB - interne Datenbank von Base) vorgehen:
SELECT "Jahr"||'/'||"ID"
Du schreibst von führenden Nullen. Führende Nullen hast Du ja nur, wenn Du gar keine Zahlen, sondern Text nimmst. Führende Nullen kannst Du Dir also für ein Integer-Feld in einem Formular anzeigen lassen - sie sind aber nicht im Integer-Feld vorhanden. Welche Eigenschaft haben die ID-Felder?
Gruß
Robert
wenn Du Felder miteinander koppeln willst, dann kannst Du bei mehreren Feldern folgendermaßen (für die HSQLDB - interne Datenbank von Base) vorgehen:
SELECT "Jahr"||'/'||"ID"
Du schreibst von führenden Nullen. Führende Nullen hast Du ja nur, wenn Du gar keine Zahlen, sondern Text nimmst. Führende Nullen kannst Du Dir also für ein Integer-Feld in einem Formular anzeigen lassen - sie sind aber nicht im Integer-Feld vorhanden. Welche Eigenschaft haben die ID-Felder?
Gruß
Robert
Re: Filtern von Datensätzen
Vielen Dank für die Hinweise!
Die Abfrage
funktioniert einwandfrei und das Ergebnis stimmt. Die weiteren Felder kann ich ohne Problem hinzufügen. Die entsprechenden Werte der Spalte "AuftrNr" kann ich mit Hilfe eines Eingabeformulars und der von Dir genannten Filtertabelle eingeben.
Gruß
Przemek
Alles Integer (obwohhl Smallinteger würde auch reichen, oder?).Welche Eigenschaft haben die ID-Felder?
Die Abfrage
Code: Alles auswählen
SELECT "Jahr" || '/' || "ID" AS "AuftrNr" FROM "Auftraege" WHERE "AuftrNr" >= '2012/1' AND "AuftrNr" <= '2014/1'
Gruß
Przemek