0

Abfrage in Haupttabelle und Untertabelle

Guten Abend, Ich möchte aus einer Haupttabelle mit Untertabelle eine Abfrage machen, klappt aber nicht.
Also: Summe der Beträge aus der Haupttabelle für die Datensätze wo Status = 1 oder 2 (also beide) und in der Untertabelle die Belegart = 2 ist.

Mein Versuch:
sum((select Haupttabelle)[Status = 1 or Status = 5 and Untertabelle.Belegart = 2].'Summe Beträge')

Ergibt keine Fehlermeldung aber als Ergebnis 0

Hilfe wäre super

12 Antworten

null
    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

     

    zunächst fällt mir auf, dass Du den oder-Part in Klammer setzen solltest, also

     

    [(Status = 1 or Status = 5) and Untertabelle.Belegart = 2]

     

    lg, Torsten

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Es kann sein, dass diese Formel auch nicht funktionieren wird. Die Untertabelle enthält mehrere Datensätze. Also muss die Formel so lauten:

    —-

    sum(select Haupttabelle[(Status=1 or Status=5) and cnt(Untertabelle[Belegart=2])>0].'Summe Beträge')

    —-

    ich bezweifle aber, dass die Ergebnisse dem entsprechen dass du dir  wünschst. Meiner Meinung nach solltest du lieber so anfragen:

    —-

    sum(select Untertabelle [Belegart=2 and (Haupttabelle.Status=1 or Haupttabelle.Status=5)].'Betrag')

    —-

     

    Leo

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten, Hallo Leo, vielen Dank für die Antworten. Leider immer noch kein Ergebnis:

    @Torsten: Deinen Klammervorschlag hatte ich auch schon ausprobiert, gibt immer noch 0

    @Leo
    sum(select Untertabelle [Belegart=2 and (Haupttabelle.Status=1 or Haupttabelle.Status=5)].'Betrag')

    Ergibt Fehlermeldung: Eine Tabellenspalte wurde nicht gefunden: Haupttabelle in Zeile 1 ......

    sum(select Haupttabelle[(Status=1 or Status=5) and cnt(Untertabelle[Belegart=2])>0].'Summe Beträge')

    Funktioniert ohne Fehlermeldung, aber die Bedingung Belegart=2 bleibt unberücksichtigt. D.h. es wird der Gesamtbetrag unabhängig von Belegart ausgeworfen.

    Vielleicht noch eine Idee?

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

    Geh bitte in deine Untertabelle rein und gucke nach, wie die Verknüpfung zu der Haupttabelle heißt.

    Leo

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,
    klar, das war's (wieder mal !!). Funktioniert genau so, wie es soll. Vielen Dank.

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, ich habe noch eine Bitte (damit ich das System besser verstehe):
    Kannst Du mir Dein Script (dass ich von der Logik sehr gut nachvollziehen kann)
    sum(select Untertabelle [Belegart=2 and (Haupttabelle.Status=1 or Haupttabelle.Status=5)].'Betrag')

    noch mal für den Fall verändern, dass bei gleicher Fragestellung
    1. "Haupttabelle" und eine verknüpfte eigenständige Tabelle
    und
    2. "Haupttabelle" und eine nicht verknüpfte Tabelle
    abgefragt werden?

    Ich denke, dass ist auch für andere User interessant. 

    Danke, das wäre prima.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

    ich verstehe die Frage leider nicht. Wenn die Tabellen verknüpft sind, dann ist die Formel von oben zu verwenden.

    Wenn die Tabellen nicht verknüpft sind, kannst du auch keine Bedingungen einstellen. 

    Leo

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, schön, dass Du trotzdem antwortest.
    Mein Problem (und offensichtlich auch vieler anderer) ist die Dokumentation von NINOX, insbesondere Syntax bei Abfragen. Wann „where“, wann [ ] wann ( ) oder { } (z.b. bei Datenfeldern im Ausdruck) usw. Es fehlen mir einfache, nachvollziehbare Beispiele, die nicht zu speziell zugeschnitten sind. So war auch meine Frage gemeint.

    Also ist es so, dass Verknüpfung gleich Verknüpfung ist , egal ob „Untertabelle“ mit „Komposition“ oder „einfache Verknüpfung. Dafür gilt demnach die [ ] ohne „where“.
    Für nicht verknüpfte Tabellen müsste meine Frage dann wohl heißen.
    Summiere aus Tabelle B den Betrag für den Fall, dass in Tabelle A der Status 1 oder 5 ist.

    Dann geht das ja nicht mehr so?
    sum(select Tabelle_B [Belegart=2 and (Tabelle_A.Status=1 or Tabelle_A.Status=5)].'Betrag')

    Vielen Dank für Deine Geduld.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

    Wenn die Tabellen nicht verknüpft sind,bedeuted es, dass keine Abhängigkeit zwischen zwei tabellen besteht. Z.B. Tabelle A beinhaltet eine Liste mit Küchengeräte und die Tabelle B - Kontobewegungen. Dann kannst nicht deine Geldeingänge summieren, abhängig davon welche Küchengeräte von Bosch hergestellt sind.

    Kannst du bitte dein Datenmodel zeigen? Dann kann ich endlich kapieren.

    Leo

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, einfache Auftragsbearbeitung. Neben den verknüpften Tabellen gibt es noch eine Tabelle "Einname_Ausgabe" in die gebucht wird und eine Tabelle "Auswertungen" in der verschiedene Auswertungen dargestellt werden.

    Aus der Tabelle "Auswertungen" heraus möchte ich wissen, welche Ausgaben Schulte verursacht hat (Tabelle "Einnahme_Ausgabe").
    Das mache ich so und funktioniert auch. 
    sum((select Einnahme_Ausgabe)[Was like "Schulte"].Ausgabe)

    Kann ich denn bei jeder Abfrage auf die Tabellen auf das "where" verzichten und nur mit den eckigen Klammern arbeiten?

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

    where funktioniert nur mit select, dagegenn [] funktioniert sowohl mit select als auch mit Untertabellen. Ich selbst beforzuge [], weil früher die where Bedingung bei komplizierten REST Abfragen versagt hat und ich musste lange suchen weil keine Fehlermaldung ausgegeben wurde aber Filter nicht funktionierte. Der Fehler sollte laut Entwiklung behoben sein, aber der bittere Beigeschmack ist bei mir geblieben.

    Leo

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    vielen Dank, das hilft mir für das Verständnis von NINOX weiter. Schritt für Schritt....

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 12Antworten
  • 3043Ansichten