0

Textfeld per ‚contains‘ oder ,like’ abfragen

Hallo zusammen,

ich habe folgende Abfrage ausbaldowert:

if contains(Ticketname, "STORNO Freifahrt") or contains(Ticketname, "STORNO Kind unter 6 Jahren") or contains(Ticketname, "STORNO Einzelfahrt (1 Euro)") or contains(Ticketname, "STORNO Schwerbehindert frei") or contains(Ticketname, "STORNO Freifahrt") then
    cnt((select 'Statistik 2022').Ticketname) - 2
else
    cnt((select 'Statistik 2022').Ticketname)
end

Irgendwie funktioniert das aber nicht. Was mache ich da falsch? Wäre eine Abfrage per ‚like‘ und nur „STORNO“ sinnvoller? 
Kann mir da jemand weiterhelfen?

Beste Grüße

Wolfgang

10 Antworten

null
    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Und was funktioniert nicht?
    Soll irgendwas angezeigt werden und wenn ja wo?
    Steht das Script in einer Funktion?
    Mehr Input.
    cnt((select 'Statistik 2022').Ticketname)  ist eigentlich Sinnfrei. Damit erhältst du die Anzahl aller vorhandenen Records in der Tabelle Statistik 2022. Es fehlt wahrscheinlich ein Argument. Was soll denn das -2 bewirken? Hier zu Antworten heißt raten.
    p.s. "STORNO Freifahrt" wird 2xAbgefragt, das löst aber nicht dein Problem, wenn man nicht weiss, was du mit dem Script bewirken möchtest.

    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke für die Rückmeldung.

    Da fragt jetzt ein Spezialist den Einsteiger. Tut mir leid, wenn diese Angaben unvollständig waren.

    Der doppelte Eintrag ist natürlich überflüssig. Der Tabellenname lautet „Statistik 2020“. In dieser Tabelle sollen in der Spalte „Ticketname“ alle Einträge gezählt werden, z.B. „Kind unter 6 Jahren“, „Freifahrt“, „Schwerbehindert frei“ usw. Das ist gleich die Anzahl der Fahrgäste. Wenn sich darunter aber auch ein Stornoeintrag befindet wie z.B.„STORNO Freifahrt“, STORNO Einzelfahrt (1Euro)“  oder „STORNO Schwerbehindert frei“, müssen von der Gesamtanzahl jeweils 2 abgezogen werden ( zunächst wird das Ticket eingebucht, danach dann die Stornobuchung. Deshalb -2). Das Script steht in einem Berechnungsfeld „Gesamtzahl Fahrgäste“ in einer Formularansicht.

    Jetzt hoffe ich nur, daß diese Beschreibung weiterhelfen kann. 

    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielleicht noch zur Ergänzung:

    Das Ergebnis ist immer die volle Anzahl der Spalte. Die „-2“ funktioniert nicht.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Vorschlag:

      let myT := cnt(select Statistik2022);
      let myS := cnt((select Statistik2022)[contains(Ticketname, "STORNO")]) * 2;
      myT - myS
      
    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ihr habt mich auf den richtigen Weg gebracht. Leicht angepasst:

    let myT := cnt((select 'Statistik 2022').Ticketname);
    let myS := cnt((select 'Statistik 2022')[contains(Ticketname, "STORNO")]) + 1;
    myT - myS
    Jetzt stimmt alles. Herzlichen Dank euch Beiden.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Nur der Vollständigkeit halber: Die Angabe des Feldes 'Ticketname' am Ende des ersten cnt() bewirkt, dass nur Datensätze gezählt werden, bei denen das Feld 'Ticketname' nicht leer ist. Wenn das genau so gewünscht war, dann ist die Ergänzung richtig.

    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Korrektur:

    Richtig ist in Zeile 2 wie vorgegeben „*2“ statt „+1“ 

    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen Dank auch noch mal für die „Vollständigkeit“. Ich habe mir das falsche Ergebnis zunächst nicht erklären können. Es sind tatsächlich unter Ticketname auch leere Felder vorhanden. Passt. Toll.

    Kann ich diese Ticketabfrage auch per Monat eingegrenzt abfragen? Mit einem Präfix evtl.? Jedes Ticket ist mit Datum in der Spalte „Datum“ versehen (so auch mit einer „Sollzeit“).

    Gruß

    Wolfgang

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Am Beispiel März (numerischer Wert = 3):

      let myM := 3;
      let myT := cnt(((select Statistik2022)[month(Datum) = myM]).Ticketname);
      let myS := cnt((select Statistik2022)[month(Datum) = myM and contains(Ticketname, "STORNO")]) * 2;
      myT - myS
      
    • netzwerkwenden0f
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Auch das war ein Treffer ins Schwarze.

    Vielen vielen Dank für die Hilfestellung.

    Wolfgang