Abfrage innerhalb einer for-Schleife
Hallo zusammen,
ich brauche mal wieder Eure Hilfe. Seit Tagen beiße ich mir die Zähne an einer Abfrage aus und verstehe nicht,
wieso keine richtigen Ergebnisse herauskommen.
Es gibt vier Tabellen: Komponenten, Modelle, Konfigurationen, Ereignisse
In der Tabelle Konfigurationen werden die Komponenten den Modellen für einen bestimmten Zeitraum zugeordnet.
In der Tabelle Ereignisse wird festgehalten, wann bei einem Modell ein Flug, eine Wartung oder eine Reparatur
stattgefunden hat.
Nun möchte ich gerne den Lebenslauf der Komponenten ausgeben. Dazu ermittele ich in Konfigurationen, von wann
bis wann in welchem Modell die Komponente eingebaut war und suche in den Ereignissen die dazugehörigen Aktivitäten.
Leider stimmen die Ergebnisse nur, wenn maximal ein Eintrag pro Zeitraum existiert, bei mehreren gibt es gar keine Ergebnisse.
let myKompName := Bezeichnung;
let a := (select Konfiguration)[Komponenten.Bezeichnung = myKompName];
for i in a do
let myModell := i.Modelle.Modellname;
let myVon := i.von;
let myBis := i.bis;
(select Ereignisse)[Modelle.Modellname = myModell and Datum >= myVon and Datum <= myBis];
end
Hat jemand eine Idee?
Gruß
Gerd
5 Antworten
-
Hallo Gerd,
Du musst Ninox bei mehreren möglichen Ergebnissen mitteilen, mit welchem Du arbeiten möchtest. Das kannst Du mit z.B. first() oder last().
last((select Ereignisse)[Modelle.Modellname = myModell and Datum >= myVon and Datum <= myBis] order by Datum)
gibt Dir das zeitlich letzte passende Ereignis aus...
lg, Torsten
-
Hallo Torsten,
vielen Dank für die schnelle Antwort.
Mit first() oder last() wird ja immer nur ein Ergebnis ausgegeben. Ich möchte aber alle Ergebnisse des select-Befehls als "Lebenslauf" ausgeben lassen.
Kann ich das Ergebnis des select-Befehls in ein Array schreiben und dieses dann Zeile für Zeile ausgeben? Wenn ja, mit welchem Befehl erfolgt die Ausgabe?
-
Hallo Gerd,
jepp.
join(let myArray :=(select Ereignisse)[Modelle.Modellname = myModell and Datum >= myVon and Datum <= myBis] order by Datum);
for i in myArray do
i.Datum + " - " + i.Ereignis
end, "
")
sollte zum Erfolg führen. "i.Ereignis" musst Du ggfls. an die von Dir verwendete Feldbezeichnung anpassen.
lg, Torsten
-
Hallo Gerd,
Hallo Torsten,
mit join() kriegt man aber eine Liste der Ereignisse, z.B. in einem f(x)-Feld. Wenn ich aber die Frage von Gerd richtig verstehe, möchtest du eine Ansicht erstellen, wo die Ereignisse als Tabelle aufgelistet sind. Da die Tabellen miteinander verknüpft sind, kann man auf mehreren Stellen auf select verzichten und die Punktnotation nutzen. Die Formel für eine Ansicht kann dann do aussehen:
---
let my := this;
(select Ereignisse)[let myF := false;
for i in my.Konfiguration do
if Datum > i.von and Datum < i.bis and Modelle = i.Modelle then
myF := true
end
end;
myF = true]
---
Leo
-
Hallo Leo, hallo Torsten,
vielen Dank für die Hilfe, letztere Formel bringt genau die Ansicht, die ich haben wollte! Super!!!
Könnte ich das Ergebnis auch in einer Variable speichern, um darauf z.B. die Funktionen sum und cnt auszuführen, ohne jedesmal die ganze Abfrage erneut ausführen zu müssen?
lg
Content aside
- vor 5 JahrenZuletzt aktiv
- 5Antworten
- 3128Ansichten