Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen? (https://www.delphipraxis.net/168042-fastreport-wie-eine-distinct-abfrage-ohne-sql-hinbekommen.html)

DeddyH 2. Mai 2012 09:54

FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Ich beiße mir gerade an folgendem Problem die Zähne aus: ich habe 2 Master-Detail-Beziehungen (also Detail -> Master -> Master). Nun möchte ich lediglich die unterschiedlichen Daten des "Master-Masters" auflisten. Da ich lediglich die Enduser-Variante vor mir habe und die Report-Enginge modifiziert wurde, scheidet eine Lösung mit einer eigenen Query etc. leider aus. Für den Fall, dass ich mich holprig ausgedrückt haben sollte, hier mal ein Beispiel.
Daten:
Code:
Zahl | Master-Bezeichnung | Master-Master-Bezeichnung
 3,5   Apfel                Obst
 2,3   Tomate               Gemüse
 1,7   Birne                Obst
 0,3   Banane               Obst
 8,9   Gurke                Gemüse
Und die gewünschte Darstellung:
Code:
Gesamt: 16,4
Arten:
  Obst
  Gemüse
Ich habe ja erst gedacht, das sei mit einer "Pseudo-Gruppierung" zu tricksen, aber da bekomme ich je nach zugewiesener Datenquelle entweder alle Bezeichnungen oder nur eine.

Bummi 2. Mai 2012 10:36

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Ich kenne die eingeschränkte Version nicht, ich nehme an Variablen gibt es auch nicht.
Wenn Du 2 Masterbänder auf das identische Dataset verwendest, im ersten nur die Summen anzeigst, die Details ausblendes und im zweiten nur die Gruppen anzeigst und die Details ausblendest, aber vielleicht habe ich die Aufgabe auch falsch verstanden ....

DeddyH 2. Mai 2012 13:49

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Die Aufgabe lautet grob: wie setzte ich so etwas
SQL-Code:
SELECT
  DISTINCT S.Titel, S.Wert
FROM
  Detailtabelle D
JOIN
  Master1 M ON M.ID = D.M_ID
JOIN
  Master2 S ON S.ID = M.S_ID
WHERE
  Bedingung
ORDER BY
  S.Titel
in FastReport um? Alle meine Versuche mit Gruppierung (und ggf. Untergruppierung) waren nicht von Erfolg gekrönt. Das hat jetzt mit den Summen nichts zu tun, ich würde zur Not auch auf einen Unterreport mit Child-Band ausweichen, aber dazu brauche ich erst einmal die Daten.

Iwo Asnet 2. Mai 2012 15:59

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Ich hab die Aufgabe bestimmt mißverstanden:

Ich hab mir ein Dataset gebaut, analog zu deinem Beispiel, schmeiss einen GroupHeader rauf (condition = "frxDBDataset1."MM"), wobei "MM" für das Master-Master-Feld "Obst/Gemüse" steht.
Darunter ein Master-Databand (Dataset= frxDBDataset1), und zwar weil der GroupHeader das so will, fertig.
Ich bekomme zwei Zeilen "Obst" und "Gemüse"
Allerdings ist mein Dataset (die Quelle) nach dem Feld "MM" sortiert.

Und die Summe (16,3) bekomm ich auf die Schnelle nicht hin, muss aber nun auch weg. Geht aber bestimmt irgendwie

Vielleicht hilfts.

EDIT: Dein SQL-Beispiel deckt sich nicht mit deiner gewünschten Ausgabe im 1.Post...

Hast Du drei Tabellen oder eine?

shmia 2. Mai 2012 16:20

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Also ich sehe hier nichts wofür man "DISTINCT" benötigen würde sondern das Problem lässt sich mit einem GROUP BY lösen:
SQL-Code:
SELECT SUM(D.Zahl) AS Summe, M.MasterMasterID FROM DetailTabelle D INNER JOIN Master M ON D.MasterID = M.MasterID
GROUP BY M.MasterMasterID
Das Ergebnis sieht so aus:
Code:
Summe  | MasterMasterID
==================
x,xx   | Gemüse
y,yy   | Obst
======
16,4 (== Gesamt)
Die Frage ist nun, ob man das ohne Hilfe von SQL hinbekommt.

DeddyH 2. Mai 2012 17:58

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Vergesst die Summe einfach, die kommt auf ein anderes Band. Es handelt sich um insgesamt 3 miteinander verknüpfte Tabellen, und ich habe es heute in 7 Stunden nicht hinbekommen, die Detailsätze so zu listen, wie ich es brauche :(

Furtbichler 3. Mai 2012 06:37

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Da es mit Fastreport grundsätzlich geht (siehe Iwo Asnet's Post), würde ich Lookupfelder (MasterMaster) in die Detail-Tabelle einfügen und dann seine Tipp verwenden.

DeddyH 3. Mai 2012 07:22

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Ich kann auf die Daten keinen Einfluss nehmen. Auch in der Sortierung bin ich leider eingeschränkt, sonst wäre das Problem längst gelöst: ich kann jede beteiligte Tabelle einzeln sortieren, nicht aber die Gesamtmenge der zusammengejointen. Das ist auch der Grund dafür, dass die benötigten Daten dann eben mehrfach erscheinen. Ich werde noch in einem letzten verzweifelten Versuch probieren, irgendwie ein eigenes Dataset da "hineinzuschummeln", wenn das nicht geht, dann lasse ich es halt und steige auf eine äußerst unsaubere Variante um (interne Stringliste, die dann zum Schluss in einem Memo ausgegeben wird).

Lemmy 3. Mai 2012 07:36

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Guten MOrgen,
naja, aus den Daten lässt sich halt nicht bel. was schustern.... hast Du Zugriff auf das Scripting im Fastreport? Wenn ja dann könntest Du den Report selbst erstellen (Page.OnManualBuild), dann kannst Du die Daten einzeln durchgehen, die nach deinen Wünschen gruppieren und das Ergebnis letzendlich per Hand auf dein Masterband malen. Eine andere Möglichkeit kenne ich nicht.

GRüße

DeddyH 3. Mai 2012 07:40

AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
 
Danke für den Tipp, ich fuchs mich mal da rein. Dummerweise ist der Report recht umfangreich mit unterschiedlichen Datenquellen, aber der Zweck heiligt ja die Mittel und somit den Aufwand ;)

[edit] Ich habe das Problem (wenn auch unsauber) lösen können, indem ich die benötigten Daten in eine Stringliste schreibe. Das dauert zwar ein wenig, da ich immer erst nachsehen muss, ob der Datensatz schon vorhanden ist, aber da dieser Report nur einmal jährlich erzeugt werden soll, kann ich damit leben. [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz