0

select - order by Anzahl der Treffer in einem Loop?

Hallo ihr Lieben,
ich habe eine dreifach verschachtelte Schleife, die am Ende einen html-Text mit join ausspuckt. Ein Beispiel hier im Screenshot. Wie ihr sehen könnt, wird am Ende jeder Kategorie die Anzahl der Einträge angezeigt, die zutreffend sind (in diesem Fall Förderungen: Übereinstimmung mit aktueller Prüfung (eine Tabelle) und einer Kategorie (eine andere Tabelle). Nun würde ich gerne, dass nach dieser Anzahl sortiert wird. Ein Teil des relevanten Codes ist hier:
 

join(let t := this;
    for i in (select 'Förderkategorien' where cnt(select 'Förderungen' where 'Zugewiesene Prüfungsleistung'.'📝 Prüfung' = t) > 0) order by 'Bezeichnung der Kategorie' do
            p1 + i.'Bezeichnung der Kategorie' + " (" + cnt(select 'Förderungen' where 'Zugewiesene Prüfungsleistung'.'📝 Prüfung' = t and 'Fördermöglichkeit'.'📂 Förderkategorie' = i) + ") "


Das bekomme ich aber nicht hin, weil ich nicht schon beim ersten select-Statement (for i in (select etc.) nach dem i suchen kann, sondern logischerweise erst innerhalb der Schleife. Ich habe schon etwas im Forum gesucht, aber die wenigen Beiträge dazu hatten meist mit alphabetischer (und nicht numerischer) Sortierung zu tun. 

Hat jemand eine Idee, wie man in Schleifen nach der Anzahl der "Treffer" suchen kann, auch wenn diese mehrere Bedingungen erfüllen sollen?
Vielen Dank im Voraus!

1 Antwort

null
    • KURT (Korrektur- und Rückmeldetool)
    • Sebastian.5
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ich habe noch die Idee bekommen, den count-Befehl nach vorne zu kopieren, dort mit der format-Funktion diese 4-stellig machen (sonst wird falsch sortiert) und zur späteren Rausfilterung die Zahlen mit 2 Hashtags am Ende zu versehen. Danach kann man die Schleifenergebnisse über rsort() nach Anzahl der Vorkommnisse sortieren. Das klappt! :)
    Schließlich kann man mit replacex die Zahlen vorne wieder "unsichtbar" machen. Hier der grobe Code für Interessierte:
     

    replacex(
    rsort(for i in select Tabelle where Bedingung do
    format(cnt(select Tabelle where Bedingung),"0000") + "Rest der Schleife" end)
    ,\d\d\d\d.[(^##)]*", "")

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 1Antworten
  • 161Ansichten
  • 1 Folge bereits