collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 59
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13632
  • stats Beiträge insgesamt: 61212
  • stats Themen insgesamt: 8356
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Unterabfrage - gruppiert und mit Zwischenrechnung  (Gelesen 75 mal)

Offline hajott

  • Newbie
  • Beiträge: 11
Unterabfrage - gruppiert und mit Zwischenrechnung
« am: Juli 29, 2017, 13:02:52 »
Hallo Wissende,

als Access-Anfänger muss ich einem anderen Access-Anfänger helfen. Keine gute Kombi, aber wir haben keinen anderen als uns - und euch ;-))

Es geht (vereinfacht ausgedrückt) um drei Aggregationsebenen. Es gibt viele Kunden, und jeder Kunde kann mehrere Rechnungen haben. Innerhalb dieser Rechnungen gibt es noch Unterposten. Es ist nun eine recht komplexe Berechnung mit Zeichenfolgen innerhalb dieser unteren Aggregationsebene nötig, das Ergebnis soll dann in die "äußere Auswertung", wo bestimmte Kundendaten verarbeitet werden. Die äußere Tabelle und auch diverse Joins spielen momentan keine Rolle, ich gebe das mal vereinfacht wieder:

SELECT
   Kundentabelle.Name,
   Zwischentabelle.Ergebnis
FROM
   Kundentabelle
INNER JOIN
   (SELECT
      Kundennummer,
      MIN(Rechnungsnummer) AS KleinsteRechnungsnummer,
      SUM(Rechnungsbetrag) AS Rechnungsbeträge,
      SUM(IIF(KomplizierterAusdruck=0,0,1)) AS Ergebnis
   FROM
      Irgendwas
   GROUP BY
      Kundennummer
   )AS Zwischentabelle


Ich gebe das nur aus dem Kopf wieder, das mit den Joins ist jetzt nicht wesentlich, das nur als "Deko". Entscheidend ist, dass ich in der Untertabelle eine waaaahnsinnig komplexe Berechnung mit Strings und Mids und Replaces durchführen muss, mit vielen IIFs. Dieser komplizierte Ausdruck besteht aus mehreren Teilrechnungen. Man kann die zwar alle dort hineinpacken, aber das wäre "meterlang".
Ich will nun, auch um das lesbarer zu halten und dass man das noch versteht, Teilergebnisse einführen: (Das hier sind jetzt Beispiele)
   Replace(Ausgangsstring,'*',' ') AS Temp1
   IIF(LEN(Temp1)>10,'lang','Temp1') AS Temp2
und ganz am Ende die Berechnung mit der SUM, die dann auch in die Obertabelle geht.
Diese Definitionen schluckt Access aber nicht, weil die Temps nicht Teil der Aggregation sind. Nun kann man in der Entwurfsansicht in Access ja sogar "Ausdruck" in solchen Fällen wählen und dann gehts. Bei verschachtelten Tabellen habe ich aber nur SQL.
Ich habe schon mal einen Test gemacht und die beiden Temps, die ja nicht Teil der Aggregation sind, unten hinter der GROUP BY - Definition angehängt, klappt auch nicht.

Was mache ich falsch?

Vielenn Dank

Hans-Jürgen
   







 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 609
Re: Unterabfrage - gruppiert und mit Zwischenrechnung
« Antwort #1 am: Juli 29, 2017, 13:41:14 »
Ich vermute, dass die Ausgangsdaten unglücklich organisiert sind, wenn Textersetzerei und IIf-Ausdrücke benötigt werden. Um mehr dazu sagen zu können, müsste zumindest ein kleiner Auszug aller beteiligten Tabellen (ggf. anonymisiert) vorliegen (muss keine DB sein; CSV-Formen tun's auch) und das genaue Ziel der Abfrage definiert sein.

Ob Du etwas falsch machst, und falls ja, was Du falsch machst, könnte man auch nur anhand der kompletten Abfrage(n) beurteilen.

PS: Replace gehört zu den langsameren Funktionem, die IMO nicht in alltäglichen Abfragen vorkommen sollte.
Grüße von der (⌒▽⌒)
 

Offline hajott

  • Newbie
  • Beiträge: 11
Re: Unterabfrage - gruppiert und mit Zwischenrechnung
« Antwort #2 am: Juli 29, 2017, 14:28:54 »
Vielen Dank, ich habe es selbst gefunden.

Es reicht nicht, wenn ich ein Feld aus der Untertabelle "hochziehe" und gleich damit rechne, ich muss den Wert erstmal im SELECT aufnehmen.

Vielen Dank für deine Mühe!