![]() |
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:
Und die gewünschte Darstellung:
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
Code:
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.
Gesamt: 16,4
Arten: Obst Gemüse |
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 .... |
AW: FastReport - wie eine DISTINCT-Abfrage ohne SQL hinbekommen?
Die Aufgabe lautet grob: wie setzte ich so etwas
SQL-Code:
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.
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 |
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? |
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:
Das Ergebnis sieht so aus:
SELECT SUM(D.Zahl) AS Summe, M.MasterMasterID FROM DetailTabelle D INNER JOIN Master M ON D.MasterID = M.MasterID
GROUP BY M.MasterMasterID
Code:
Die Frage ist nun, ob man das ohne Hilfe von SQL hinbekommt.
Summe | MasterMasterID
================== x,xx | Gemüse y,yy | Obst ====== 16,4 (== Gesamt) |
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 :(
|
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.
|
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).
|
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 |
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 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz