Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Filterkriterien über mehrere Spalten hinweg

Dieses Thema im Forum "SQLite" wurde erstellt von spek23, 19 März 2020.

  1. spek23

    spek23 Neuer Benutzer

    Ich nutze die DB Kexi (sqlite) unter Linux und habe folgendes Problem.
    Für ein Objekt werden u. a. die Felder "ort_1, ort_2 ... ort_16" sowie "d.m_1, d.m_2 ... d.m_16" und noch "jahr_1, jahr_2 ... jahr_16" vergeben.
    Das variiert dann satzweise.
    Wie müsste eine Abfrage für die Tabelle aussehen, die angibt, welche zeitlichen Treffer es für einen zu wählenden Ort gibt einschl. d.m (Tag.Monat) und Jahr?
    Nicht zutreffende Felder sollen nicht ausgegeben werden.
    Wie es scheint, kann Kexi nicht alle sqlite-Konventionen nutzen.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Din Tabellendesign scheint arg kapott zu sein, mit den nummerierten Spalten und der Trennung von Tag, Monat und extra Jahr.

    Zeig doch mal paar Datensätze (vielleicht nicht immer alle 16 Spalten, 3 würden ja reichen.)
     
  3. spek23

    spek23 Neuer Benutzer

    Die Datumsangaben habe ich auf Empfehlung der Entwickler gesplittet, das Jahr als Ganzahl angegeben
     

    Anhänge:

  4. akretschmer

    akretschmer Datenbank-Guru

    *facepalm*
     
  5. spek23

    spek23 Neuer Benutzer

    Damit kann ich leider nichts anfangen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ja. Ich mit Deinem Bild auch nix.

    Code:
    test=*# select * from spek23 ;
        ort1    |  dd1  |  j1  |    ort2     |  dd2  
    ------------+-------+------+-------------+-------
     Brno       | 01.04 | 1942 | Dresden     |
     Grenoble   | 11.01 | 1943 | Couckien    |
     Wieda      |       |      | Wernigerode | 04.07
     Letzlingen | 12.04 | 1945 | Kehnert     |
    (4 rows)
    
    test=*# with x as (select ort1, dd1, j1 from spek23 union all select ort2, dd2, NULL from spek23) select * from x;
        ort1     |  dd1  |  j1  
    -------------+-------+------
     Brno        | 01.04 | 1942
     Grenoble    | 11.01 | 1943
     Wieda       |       |
     Letzlingen  | 12.04 | 1945
     Dresden     |       |
     Couckien    |       |
     Wernigerode | 04.07 |
     Kehnert     |       |
    (8 rows)
    
    test=*# with x as (select ort1 as ort, dd1 as dd, j1 as j from spek23 union all select ort2, dd2, NULL from spek23) select * from x where ort = 'Dresden';
       ort   | dd | j
    ---------+----+---
     Dresden |    |
    (1 row)
    
    test=*#
    
    tl;dr

    wäre ich Du, würde ich das entsorgen.
     
  7. spek23

    spek23 Neuer Benutzer

    @akrestschmer
    [/QUOTE=

    wäre ich Du, würde ich das entsorgen.[\QUOTE]

    Deswegen habe ich viele Stunden im Netz gesucht und probiert um eine eigene und elegantere Lösung zu finden. Vielleicht kannst Du mir einen kleinen Anstoß geben, damit ich besser die Richtung finde.
    Danke
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Das Problem ist Deine Ausgangstabelle. Diese habe ich ja erst einmal transformiert, nur dieser Transformationsschritt ist das Problem. Mit der transformierten Tabelle ist alles easy. Wird es nun klarer?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden