0

Jahreszahl als Text nach Jahren sortieren ?

Aus einer sehr umfangreichen Dokumentensammlung habe ich Jahreszahlen in eine Ninox-Datenbank (Textfeld) übernommen. Mein Problem: Die Jahreszahlen lassen sich so nicht sinnvoll (auf- oder absteigend) sortieren.
Gespeichert sind einige zig-tausend Datensätze in der abgebildeten Form (Einzelner Jahrgang, oder Jahrgang "von bis" durch Bindestrich getrennt).
Wie kann ich möglichst effektiv die Daten in diesem Feld so umwandeln, dass sie bei gleichem Inhalt sortierbar werden?

2 Antworten

null
    • Leonid_Semik
    • vor 6 JahrenWed, July 17, 2019 at 8:39 AM UTC
    • Gemeldet - anzeigen

    Hallo Holzi,

    Da Ninox nur nach sichtbaren Feldern sortieren kann musst du eine Zusatzspalte oder ein Funktionsfeld hizufügen und danach sortieren.

    Als Formel kann ich dir folgendes anbieten:

    ---

    let my := this;
    let myT := (select 'DEINE TABELLE');
    let myAR := split(Jahr, "-");
    cnt(myT[number(first(split(Jahr, "-")) < number(first(myAR)))]) + 1 + if number(first(split(Jahr, "-")) = number(first(myAR))) then
    cnt(myT[number(first(split(Jahr, "-")) = number(first(myAR))) and number(last(split(Jahr, "-")) < number(last(myAR)))]) + 1
    else
    0
    end + if Jahr = my.Jahr then
    cnt(myT[Jahr = my.Jahr and number(_id) < number(my._id)]) + 1
    else
    0
    end - 2

    ---

    Es kann sein, dass es bei mehreren tausend Datensätze zu performance-problemen kommt. in diesem Fall würde ich das Sortierungsfeld als Zahlenfeld hinzufügen und die Formel als Trigger nach Änderung bei Jahr:

    ---

    for i in select 'DEINE TABELLE' do
    let myT := (select 'DEINE TABELLE');
    let myAR := split(i.Jahr, "-");
    i.(SORTIERUNGSFELD := cnt(myT[number(first(split(Jahr, "-")) < number(first(myAR)))]) + 1 + if number(first(split(Jahr, "-")) = number(first(myAR))) then
    cnt(myT[number(first(split(Jahr, "-")) = number(first(myAR))) and number(last(split(Jahr, "-")) < number(last(myAR)))]) + 1
    else
    0
    end + if Jahr = i.Jahr then
    cnt(myT[Jahr = i.Jahr and number(_id) < number(i._id)]) + 1
    else
    0
    end - 2)
    end

    ---

    Leo

    • Holzi
    • vor 6 JahrenWed, July 17, 2019 at 8:56 PM UTC
    • Gemeldet - anzeigen

    Leo, Du bist der Größte ....
    Genauso funktioniert es, darauf wäre ich nie gekommen.
    Mit der Version 1 läuft es es problemlos = keine performance-Probleme.
    Vielen Dank.

Content aside

  • vor 6 JahrenWed, July 17, 2019 at 8:56 PM UTCZuletzt aktiv
  • 2Antworten
  • 1185Ansichten