Filtern von Datensätzen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Cyklista
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Filtern von Datensätzen

Beitrag von Cyklista »

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
F3K Total
********
Beiträge: 3707
Registriert: Mo, 28.02.2011 17:49

Re: Filtern von Datensätzen

Beitrag von F3K Total »

Moin,
Cyklista hat geschrieben:Wird es möglich sein ...
Ja.
Beispiele siehe hier.
Gruß R
F3K Total
********
Beiträge: 3707
Registriert: Mo, 28.02.2011 17:49

Re: Filtern von Datensätzen

Beitrag von F3K Total »

Viel Erfolg
Gruß R
Zuletzt geändert von F3K Total am So, 12.01.2014 22:47, insgesamt 1-mal geändert.
Cyklista
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Re: Filtern von Datensätzen

Beitrag von Cyklista »

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
RobertG
********
Beiträge: 2064
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Filtern von Datensätzen

Beitrag von RobertG »

Hallo Przemek,

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')
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
F3K Total
********
Beiträge: 3707
Registriert: Mo, 28.02.2011 17:49

Re: Filtern von Datensätzen

Beitrag von F3K Total »

Hi,
warum filterst du nicht einfach nach dem Datum?
Gruß R
Cyklista
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Re: Filtern von Datensätzen

Beitrag von Cyklista »

@ 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:
warum filterst du nicht einfach nach dem Datum?
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.

GRuß

Przemek
F3K Total
********
Beiträge: 3707
Registriert: Mo, 28.02.2011 17:49

Re: Filtern von Datensätzen

Beitrag von F3K Total »

Moin,
Cyklista hat geschrieben:Vielen Dank für die Antwort, aber ich habe mich nicht genau ausgedrückt.
Cyklista hat geschrieben:aber an einem Tag gibt es meistens mehrere Aufträge.
Bin ich hier im Kindergarten?
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
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Re: Filtern von Datensätzen

Beitrag von Cyklista »

Sorry! :(
Du brauchst aber nicht antworten, wenn Du nicht willst.
RobertG
********
Beiträge: 2064
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Filtern von Datensätzen

Beitrag von RobertG »

Hallo Przemek,

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"))
Die Tabelle "Filter" hat nur einen Datensatz. Darin befinden sich die Felder "Integer1", "Jahr1", "Integer2", "Jahr2".

Gruß

Robert
Cyklista
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Re: Filtern von Datensätzen

Beitrag von Cyklista »

Vielen Dank für die Antwort.
Irgendwas passt da aber nicht, vielleicht habe ich irgendwo einen Fehler gemacht ?
Die Tabelle "Filter" hat nur einen Datensatz. Darin befinden sich die Felder "Integer1", "Jahr1", "Integer2", "Jahr2".
Also die Tabelle "Filter" hat insgesamt 5 Spalten: "Id" als BOLEAN (Primärschlüssel), "Integer1", "Jahr1", "Integer2", "Jahr2" als INTEGER.
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")
aber das funktioniert nicht.
Sollte das nicht gehen, dann:

Code: Alles auswählen

SELECT CONCAT("Jahr", "ID")
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 :

Code: Alles auswählen

SELECT "ID", "Jahr", CONCAT( "Jahr", "ID" ) AS "AuftrNr" FROM "Auftraege" WHERE "AuftrNr" >= 20130001 AND "AuftrNr" <= 20140002
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
RobertG
********
Beiträge: 2064
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Filtern von Datensätzen

Beitrag von RobertG »

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
Cyklista
***
Beiträge: 50
Registriert: Mo, 04.11.2013 23:34

Re: Filtern von Datensätzen

Beitrag von Cyklista »

Vielen Dank für die Hinweise! :D
Welche Eigenschaft haben die ID-Felder?
Alles Integer (obwohhl Smallinteger würde auch reichen, oder?).

Die Abfrage

Code: Alles auswählen

SELECT "Jahr" || '/' || "ID" AS "AuftrNr" FROM "Auftraege" WHERE "AuftrNr" >= '2012/1' AND "AuftrNr" <= '2014/1'
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
Antworten