Bericht 2spaltig

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Bericht 2spaltig

Beitrag von Frewer » Mi, 25.03.2020 11:46

Hallo,
möchte in einem Bericht 2 Spalten mit Kosten neben einander darstellen. Eine Spalte "A", daneben die Spalte "E" und jeweils darunter nur die Kosten. Die Daten stehen in einer DB mit einem Primärschlüssel (Autowert), dem Feld "Wer" (A bzw E), dem Feld "Kosten" wobei nur die Kosten dargestellt werden sollen, die in einem Feld der DB "dbok" eine 1 beinhalten. Eine entsprechende Abfrage habe ich erstellt, die zunächst die Forderung erfüllt aber für den Berichtszweck nicht ausreichend ist.
Nun habe ich detailliert das Beispiel im Buch "Base_Gesamtband_V62-1" versucht zu verstehen, scheitere aber bereits in der SQL Abfrage an T1 und T2. Im ganzen Beispiel (das ja noch eine viel kompliziertere SQL Abfrage hat) finde ich keine Zuordnung von Tab1,Tab2 und T1,T2 zu irgendwas. Die einzige Tabelle heißt "Geburtstage" die durch den Alias "a" angesprochen wird (lese ich aus der Abfrage in der der Alias angegeben ist und der SQL "Geburtstage" AS "a").
Die für meine Frage nötige Abfrage müsste ja viel einfacher sein, weil die ganzen Abfragekriterien zum Datum nicht nötig sind.

Ich bin an einer Aufklärung sehr interessiert, da ich versucht habe die SQL in meinem Beispiel vereinfacht anzuwenden

SELECT "T1"."Wer" AS "Name1", "T1"."Kosten" AS "Kosten1", "T2"."Wer" AS "Name2", "T2"."Kosten" AS "Kosten2"
FROM
( SELECT "Wer", "Kosten", "ZeilenNr" AS "Zeile" FROM
( SELECT "a".*,
( SELECT COUNT( "ID" ) FROM "DBTest" AS "a" WHERE
"Kosten" || "a"."ID")
AS "ZeilenNr"
FROM "DBTest" AS "a")
WHERE MOD( "ZeilenNr", 2 ) > 0)
AS "T1"
LEFT JOIN
( SELECT "Wer", "Kosten", "ZeilenNr" - 1 AS "Zeile") FROM
( SELECT "a".*,
( SELECT COUNT( "ID" ) FROM "DBTest" WHERE "Kosten" || "a"."ID")
AS "ZeilenNr"
FROM "DBTest" AS "a")
WHERE MOD( "ZeilenNr", 2 ) = 0)
AS "T2"
ON "T1"."Zeile" = "T2"."Zeile"
ORDER BY "T1"."Zeile"

Die Fehlermeldung beim Ausführen beginnt mit "Dateninhalte konnten nicht gelesen werden". Dann "Unexspected token ), requires FROM in statement [.... gesamte Abfrage kopiert.

Gibt es eine Rettung?
Gruß Frewer

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » Mi, 25.03.2020 20:55

Hallo Frewer,

ohne das Beispiel jetzt raus zu holen:
Versuche erst einmal die Abfrage, die Du da hast, nur zur Hälfte, das heißt bis zu dem LEFT JOIN. Nimm alles raus, was ich auf T2 bezieht. Die Klammerung in dem Teil für T2 ist nämlich völlig konfus.

T1 und T2 hast Du, um zwei Spalten herstellen zu können.
Einen counter lässt Du in den Unterabfragen mitlaufen.
T1 und T2 müssen genau die jeweils folgenden Datensätze anzeigen. T1 zeigt die ungeraden Datensätze an, weil es einen Rest gibt, wenn Du die Zeilennummer durch 2 teilst. Das ist auch schon der einzige Unterschied zwischen T1 und T2. Bei T2 eben kein Rest (MOD(Zeilennummer, 2)).

Auch bei den Unterabfrage im ersten Teil verhaspelst Du Dich völlig.

Code: Alles auswählen

SELECT COUNT( "ID" ) FROM "DBTest" AS "a" WHERE "Kosten" || "a"."ID"
müsste ja als Unterabfrage irgendeinen Sinn ergeben. Da steht aber zum Schluss eine WHERE-Bedingung, ohne dass irgendetwas miteinander verglichen wird. Ist "Kosten" || "a"."ID" irgendeiner anderen Sache gleich?

Fange mit dem Counter an und baue den Rest genau dort herum. Das funktioniert auch, wenn Du Abfragen normal in der GUI eingibst. Dann machst Du die erste Abfrage und beziehst dann die zweite Abfrage auf die erste Abfrage. Die GUI macht daraus stimmige Abfragen.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Do, 26.03.2020 17:32

Hallo Robert aus der Quarantäne,

na ja, nur "druff", wie man in der Pfalz sagt. Jedenfalls vielen Dank, habe wieder was gelernt und bin einen Schritt weiter. Trotzdem nach 1 Tag Versuche bin ich "schweißgebaded".
Bin vorgegangen, wie Du es gesagt hast, bin aber endlich doch nicht am Ziel. Die SQL ist doch sehr "verstehintensiv". Mein erstes Vorgehen war eigentlich ohne das Verstehen von SELECT - FROM - WHERE - ON - ORDER etc. Da habe ich noch Nachholbedarf.

1.Schritt: (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0) ergibt die Zahl 6 = richtig (5x"A", 1x"E")

2.Schritt:
(SELECT "a".*, (SELECT COUNT( "ID" ) FROM "DBTest" AS "a" WHERE "dbok" = 0) AS "ZeilenNr" FROM "DBTest" AS "a")
listet 36 Datensätze (6x6?) zusätzlich 1 Spalte "ZeilenNr" mit der Zahl 6 in jeder Zeile. Klar wahrscheinlich, weil "a".* nicht eingeschränkt wird.

3.Schritt:

SELECT "T1"."Wer" AS "Name1", "T1"."Kosten" AS "Kosten1" FROM
(SELECT "Wer", "Kosten", "ZeilenNr" AS "Zeile" FROM
(SELECT "a".*,
(SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0) AS "ZeilenNr" FROM "DBTest" AS "a")
WHERE MOD("ZeilenNr",2)>0) AS "T1"

Ergebnis: Die Überschriften Name1 und Kosten1 erscheinen, aber kein Inhalt in der Abfrage. Dabei sollten doch als Name1 "A" erscheinen und als Kosten1 Zahlen und zwar 5 Zeilen, weil die 6te zum Namen2 = "E" gehören sollte.

4.Schritt:
letzte Zeile gändert in - WHERE "dbok"=0) AS "T1"- und bekomme jetzt 6 Datensätze angezeigt mit Name1 sowohl "A" als auch "E". Fehlt also Sortierung nach "Wer".

5.Schritt:
Ein Einfügen eines weiteren Sortierkriteriums in diese Zeile - "dbok"=0 AND "Wer" = "A" - führt zur Fehlermeldung [Column not found: A in statement [..., obwohl die column ja "Wer" ist und diese nur A bz E beinhaltet.

6.Schritt: T1 und T2 zusammengebaut
SELECT "T1"."Wer" AS "Name1", "T1"."Kosten" AS "Kosten1", "T2"."Wer" AS "Name2", "T2"."Kosten" AS "Kosten2" FROM
(SELECT "Wer", "Kosten", "ZeilenNr" AS "Zeile" FROM
(SELECT "a".*,(SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0)
AS "ZeilenNr" FROM "DBTest" AS "a")
WHERE "dbok"=0) AS "T1"
LEFT JOIN
(SELECT "Wer", "Kosten", "ZeilenNr" AS "Zeile" FROM
(SELECT "a".*,(SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0)
AS "ZeilenNr" FROM "DBTest" AS "a")
WHERE "dbok"=0) AS "T2"
ON "T1"."Zeile" = "T2"."Zeile"
ORDER BY "T1"."Zeile"

Ergebnis: Unter Name1, Kosten1 werden Pakete von jeweils 6 Zeilen gleichen Inhalts (zB A 7,00€), unter Name2, Kosten2 in 6er Packs (dbok=0) nicht sortierter Name mit richtigen Kosten gelistet allerdings das Ganze 6x6=36Zeilen???).

Mein Ziel, alle Kosten1 des Name1 (A) für dbok=0 links und alle Kosten2 des Name2 (E) für dbok=0 rechts zu listen, kann ich noch nicht erreichen. Das Sortierkriterium ID brauche ich eigentlich nicht, weil mit Wer = "A" v "E" und dbok=0 eigentlich die richtigen Werte gefunden werden sollten es sei denn für die Anzahl der ermittelten Zeilen. Ich will nicht abwechselnd SP1, Sp2 sondern 2 Spalten -Kosten1, Kosten2-. Die zugehörigen Namen würde ich dann in den Kopf schreiben. So ähnlich wie in der Beispieldatenbank "Beispiel_Bericht_Zeile_Farbwechsel.." - "Bericht_mit_Monatsnamen_2spaltig".

Für einen Experten ist das sicher kein Problem ganz anders für mich

Gruß Frewer

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » Do, 26.03.2020 17:55

Hallo Frewer,

dann starten wir einmal mit dem 2. Schritt. Code setze ich übrigens immer in </> ein:

Code: Alles auswählen

SELECT "a".*, (SELECT COUNT( "ID" ) FROM "DBTest" AS "a" WHERE "dbok" = 0) AS "ZeilenNr" 
FROM "DBTest" AS "a"
Da ist erst einmal das 'AS "a"' in der Unterabfrage falsch.

Code: Alles auswählen

SELECT "a".*, (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0) AS "ZeilenNr" 
FROM "DBTest" AS "a"
Dann ist der Counter noch nicht mit der äußeren Abfrage verbunden. Und die äußere Abfrage hat auch noch keine Einschränkung gleich der inneren Abfrage. Das hole ich jetzt nach:

Code: Alles auswählen

SELECT "a".*, (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0) AS "ZeilenNr" 
FROM "DBTest" AS "a"  WHERE "dbok" = 0
So müsstest Du jetzt 6 Datensätze haben. Der Counter im ersten Schritt hat ja genau das ergeben. Er schreibt jetzt in jeden Datensatz leider eine '6' rein. Hier hilft nur die Beziehung, die ich gerne über die "ID" herstelle, weil die ja wohl einzigartig ist:

Code: Alles auswählen

SELECT "a".*, (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0 AND "ID" <= "a"."ID") AS "ZeilenNr" 
FROM "DBTest" AS "a"  WHERE "dbok" = 0
Durch den Alias bei der äußeren Abfrage kann ich auf den jeweils aktuellen Datensatz der äußeren Abfrage zugreifen, indem ich innerhalb der inneren Abfrage dieses "a" nutze. Jetzt müsste der Counter die Zahlen von 1 bis 6 je nach Datensatz aufschreiben - abhängig von der ID.

Bis dahin erst einmal.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Do, 26.03.2020 19:47

Hallo Robert,
SQL habe ich ergänzt (übrigens hatte ich das < AS "a" > in der Unterabfrage bereits rausgenommen aber vergessen hier zu korrigieren):
Ergebnis: Anzeige von 6 Zeilen (korrekt) nicht nach A bzw E sortiert.

Um das zu kapieren habe ich jetzt mal wieder den Code durch den Anteil T2 ergänzt und bekommen 2 Spalten mit den selben Daten (was vorher nicht der Fall war). Beim Herumexperimentieren mit dem Ausdruch < AND "ID" <= "a.ID" > passieren interessante, für mich unerklärliche Dinge:
Weglassen in der einspaltigen Darstellung -> keine Änderung
Weglassen bei 2spaltiger Darstellung in der 1ten Spalte -> 1.Spalte ok, 2te Spalte enthält 6x die Werte der 2ten Zeile der 1.Spalte.
Also lerne ich, dass durch
< /
AND "ID"" <= "a"."ID" /
>
die Limitierung auf die 6 Zeilen erzeugt wird obwohl ich das noch nicht wirklich verstanden habe. Der Zusatz heißt doch auf deutsch AND ID <= ID der Tabelle = letzte Zeilennr. Wie das logisch zum Ergebnis beiträgt, ist mir noch rätselhaft.

2. Frage: warum wird der Alias "a" für DBTest nur an bestimmten Stellen geschrieben und nicht grundsätzlich die DB mit dem Alias versehen und dann auch immer nur der Alias benutzt?

Gruß Frewer

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » Do, 26.03.2020 21:28

Hallo Frewer,

Du musst irgendwie geregelt bekommen, dass die Sortierung der einfachen Abfrage in der Reihenfolge läuft wie die Nummerierung. Wenn also "ID" nicht ausreicht, dann musst Du eine Kombination von "ID" mit einem anderen Feld herstellen.
Du kannst nicht zweimal in der gleichen Gesamtabfrage auf den gleichen Alias zugreifen und unterschiedliche Inhalte erwarten. Nimm für die zweite Spalte anschließend "b" - aber erst, wenn Du die erste Spalte völlig klar hast, also mit den Zeilennummern 1, 3 und 5.
Danach kannst Du Dich um die Verbindung kümmern. "a"."ZeilenNr"+1 muss gleich "b"."ZeilenNr" sein, damit die Werte von anfangs Zeile1 und Zeile 2 jetzt nebeneinander erscheinen.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Fr, 27.03.2020 09:32

Hallo Robert,
aha, die Unterscheidung der Spalten, das war ein Pkt, der mir garnicht klar war. Das ist jetzt kapiert wie gesagt mit SQL habe ich doch Verständnisprobleme über die Auswirkungen einer Anweisung. Ich hangele mich da im Moment in Microschritten weiter.
Bei der Sortierung hatte ich, bei ersten Versuchen, nach zwei Kriterien sortiert nämlich nach <Wer> und nach <dbok=0> Damit bekam ich zwar nicht 2 Spalten aber ein Abfrageergebnis nach <Wer> getrennt. Dann hatte ich versucht die SQL ähnlich aufzubauen indem ich die äußere <WHERE> Anweisung <"beok"=0 > ergänzte zu <"beok"=0 AND "Wer"="A">. Da bekam ich aber immer die Fehlermeldung, dass die Spalte A fehlt. Also werde ich heute nochmal in kleinsten Schritten mit dem Abfrage-Assistenten und der Umschaltung auf SQL die richtigen Schritte abklären.

Übrigens noch einmal vielen Dank für Deine Geduld mit einem Anfänger. Ich finde es prima, dass in dem Forum mir so intensiv geholfen wird. Dabei glaube ich, dass meine Idee eigentlich ein häufig vorkommendes Problem sein könnte, denn was geht schon in Berichten ohne mehrere Spalten.

Gruß und werde mich mit dem Ergebnis meiner versuche wieder melden
Frewer

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Fr, 27.03.2020 18:25

nach Versuchen ist die Situation jetzt so:
Nur Anteil T1:
Durch das Ergänzen von < "Wer"='A' > in der WHERE-Abfrage, bekomme ich eine Spalte mit genau den Kostenangabe, wie gewünscht.
Durch Ergänzen der Anzeige von ID werden auch genau die betroffenen Zeilennummern angezeigt.

Dann habe ich den 2ten Teil nach LEFT JOIN wie gehabt zu ergänzen, den Alias der Tabelle in "b" umzubenennen und hinter COUNT("ID")+1 zu setzen ( - Deine Vorschlag "a"."ZeilenNr"+1 muss gleich "b"."ZeilenNr" sein, damit die Werte von anfangs Zeile1 und Zeile 2 jetzt nebeneinander erscheinen.- ).
Ergebnis: Spalte 1 ok, zeigt die Datensätze der Zeilen 3,4,5,8,10 (ID) für 'A' an, die Spalte2 ist nur teilweise ok. Es wird nur 1 Wertepaar für 'E' angezeigt und zwar mit der ID 7 (korrekt) auf der Höhe von ID 5 der Spalte 1. Es fehlt in der 2ten Spalte ein weiterer Wertesatz mit dbok=0 mit der ID 1.
Durch vergrößern von COUNT("ID")+1 rutscht in der 2ten Spalte das Wertepaar immer 1 Zeile nach "unten" Richtung ID 3 von Spalte 1, das fehlende Wertepaar der Spalte 2 taucht trotzdem nicht auf.
Dann habe ich COUNT("ID")-1 eingegeben und siehe da jetzt steht das Wertepaar ID 1 für 'E' in der Zeile gegenüber ID 3 Spalte 1, das mit ID 3 rutscht 1 Zeile höher gegenüber ID 8 der Spalte 1. Dazwischen sind 2Zeilen leer, die ich zunächst nicht erklären kann. Ebenso kann ich nicht erklären, warum die Spalte1 völlig korrekt dargestellt wird, während die Spalte2 sehr von dem Faktor der zur ID hinzugezählt oder abgezogen wird.
Habe da mal weiter rumgespielt und statt für "E" die ID 1, ID 7 dann die ID 5, ID 7 gewählt. Jetzt wird bei Faktor -1 wieder nur 1 Wertepaar ID 7 angezeigt. Setze ich den Faktor auf -2 dann werden wieder beide ID parallel zu den ID 8 und 10 der Spalte1 angezeigt.
Mein Schluß:
1. es muß ein Kriterium für den Faktor in "a" geben ( = Anzahl der Zeilen in "b" mit dbok=0 AND Wer=E)
2. es fehlt die Festlegung des Beginns der Spalte 2

Ich hänge mal meine DBTest komplett an. Vielleicht fällt Dir da noch etwas auf.

Gruß
Frewer
Dateianhänge
DBTest.odb
(4.83 KiB) 8-mal heruntergeladen

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » Fr, 27.03.2020 20:21

Hallo Frewer,

Du willst also gar nicht eine Gesamtübersicht gleichmäßig auf 2 Spalten verteilen, sondern auf der linken Seite nur die "Wer"='A' und auf der rechten Seite die "Wer"='E'. Dann musst Du beide einfach komplett durchnummerieren.

Code: Alles auswählen

SELECT "Wer", "Kosten", "ID", "ZeilenNr" AS "Zeile" FROM 
	(SELECT "b".*, (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0 AND "ID" <= "b"."ID") AS "ZeilenNr" 
    FROM "DBTest" AS "b")  WHERE "dbok" = 0 AND "Wer"='E'
Wird zu

Code: Alles auswählen

SELECT "Wer", "Kosten", "ID", "ZeilenNr" AS "Zeile" FROM 
	(SELECT "b".*, (SELECT COUNT( "ID" ) FROM "DBTest" WHERE "dbok" = 0 AND "Wer"='E' AND "ID" <= "b"."ID") AS "ZeilenNr" 
    FROM "DBTest" AS "b")  WHERE "dbok" = 0 AND "Wer"='E'
Das bedeutet, dass beide Spalten bei 1 anfangen zu zählen. Und Du kannst dann die Zeilennummer der ersten gleich der Zeilennummer der zweiten setzen.
Dann musst Du aber jetzt sicher sein, dass in der ersten Spalte von vornherein mehr oder zumindest gleich viele Datensätze sind wie in der zweiten Spalte. Das wurde in der Zusammenstellung, die ich für das Handbuch gemacht habe, darüber gewährleistet, dass durchlaufend nummeriert wurde.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Fr, 27.03.2020 21:42

Hallo Robert,
genau so, super! Was doch so eine kleine Einschränkung bringt. Der Faktor +1 ist jetzt auch weg, da ansonsten die 2te Spalte wieder nicht passt.
Allerdings kann ich nicht garantieren, dass die Spalte 2 immer weniger Datensätze als die Spalte1 hat. Also muss ich noch ran und werde Dein Beispiel erneut durcharbeiten. Jetzt vielleicht etwas leichter, weil ich doch wesentliche Merkmale intus habe.
Es wird ein spannender morgiger Tag bei mir.

Gruß und merci
Frewer

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » So, 29.03.2020 18:35

Hallo Robert,

habe versucht die Beispieldatenbank detailliert zu analysieren und auf mein Ziel anzupassen. Leider bin ich noch nicht erfolgreich, weil ich erst noch Kriterien definieren mus, die dem Geburtstag entsprechen. Nun ich hoffe, dass ich da was finde.
1te Frage:
Warum sind im Beispiel unter Tabellen die Ansichten "Bericht_Monat_zweispaltig" und "MonatZ"? Das sind doch eigentlich Abfragen, die unter die Abfragenrubrik gehören.
2te Frage:
Warum meldet der Interpreter "Fehler in der SQL Syntax", wenn ich MonatZ in "DesignAnsicht an-/aus" öffne. Und warum stehen im Bericht an Stelle der Monatsnamen immer "0"? während in der Abfrageansicht die korrekten Monatsnr stehen?

Gruß
Frewer

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » So, 29.03.2020 19:35

Hallo Frewer,

Ansichten sind Abfragen, die direkt in der Datenbank gelöst werden. Damit hat die GUI von Base nichts zu tun. Mit Ansichten kann grundsätzlich der ReportBuilder besser umgehen als mit Abfragen - weil er die Ansichten wie Tabellen nutzen kann. Sonst versucht der Reportbuilder den Abfragecode zu kapieren und dann geht noch mehr schief, als dies bei Abfragen in der GUI manchmal der Fall ist, wenn der Code per Hand ergänzt wurde.

Sobald Du eine gut funktionierende Abfrage hast, die Du in Berichten nutzen möchtest - mach' daraus eine Ansicht.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Mo, 30.03.2020 18:23

Hallo Robert,
danke, das mit den Ansichten ist jetzt klar und klappt auch. Trotzdem, ich krieg das einfach nicht hin, was ich mir vorgestellt habe. Ich habe zwar Deine Geburtstagsvariante mit den Leerzeilen für den fehlenden Monat verstanden, doch trifft das bei mir zunächst mal nicht zu. Im übrigen kann ich in Deiner Ansicht MonatZ zwar den SQL Ausdruck im Feld verstehen, dennoch fehlen mir einfach Basics und mich wundert, dass beim Umschalten auf SQL Ansicht immer "Fehler in der SQL Syntax" gemeldet wird, so dass ich die SQL der Ansicht insgesamt nicht sehen kann.

Ich habe auf Basis meiner DBTest eine Ansicht wie MonatZ erstellt nur um den Zaehler der gefilterten Ausdrücke mal zu sehen:
Dazu habe ich in die Ansicht meine DBTest eingegeben und alle Felder angezeigt. Dann, ähnlich Deiner Ansicht MonatZ in eine Spalte, die ich mit dem Alias "Zaehler" bezeichnet habe, als Feld folgende SQL eingegeben:
< SELECT Anzahl( "ID" ) FROM "DBTest" WHERE "DBTest"."dbok"=0 AND "DBTest"."Wer"= 'A' || "DBTest"."ID" >
Als ALIAS für die Spalte habe ich "Zaehler" eingegeben.
Ergebnis:
Die Spalte < SELECT........> ist unbekannt.
Dabei sind mir mehrer Fragen zur BeispielDatenbank aufgefallen wie: Wo kommt in der Ansicht MonatZ der Alias a für die Tabelle her? Wieso erscheint in der MonatZ-Ansicht bei der Umsetzung die Spalten Monatszahl und Monatszaehler und bei meiner Variante nicht? Warum lässt sich die Ansicht MonatZ problemlos öffnen, bei der Umschaltung "Abfrage öffnen" wird ein Fehler gemeldet ebenso, wenn man auf "Design-Ansicht ein/aus" geht?

Wenn ich nicht weiterkomme habe ich mir folgenden Plan B überlegt:
Ich zaehle die Anzahl der Zeilen für "Wer"='A' AND "dbok"=0 in Zaehler1 und die Zeilen für "Wer"='E' AND "dbok"=0 in Zaehler2.
Mache 2 Ansichten, die sich nur darin unterscheiden, dass in T1 einmal 'E' benutzt wird in der anderen Ansicht dann 'A' und wähle mit Zaehler1>Zaehler2 oder umgekehrt die jeweilige Ansicht aus. Mich stört nämlich nicht, ob die linke Spalte 'E' oder 'A' ist. Fehlt nur noch wie ich das mit der Ermittlung der Zaehlerwerte 1 und 2 hinkriege.

Gruß
Frewer

RobertG
*******
Beiträge: 1833
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht 2spaltig

Beitrag von RobertG » Mo, 30.03.2020 21:30

Hallo Frewer,

Du hast doch das Problem, dass Du nicht weist, welches von beiden Elementen nun gerade mehr Teile enthält. Ich habe das jetzt gerade nicht mehr auf dem Schirm, weil ich so viel anderes hier am PC erledige, aber hilft Dir nicht eine Abfrage mit CASE WHEN? Nach dem Motto: Wenn die Gesamtzahl von dem anderen Element größer ist, dann Zähle weiter bis zur Gesamtzahl des anderen Elementes.

Wenn Du etwas an Deiner BeipielDB geändert hast, dann lade das doch noch einmal hoch. Vielleicht habe ich dafür ja am Rande noch etwas Zeit.

Gruß

Robert

Frewer
**
Beiträge: 29
Registriert: Do, 05.03.2020 16:10

Re: Bericht 2spaltig

Beitrag von Frewer » Di, 31.03.2020 12:54

Hallo Robert,

sorry, dass ich Dich so belaste. Das tut mir echt leid. Aber so ist es eben mit den "Newcomern", man versucht eben so schnell wie möglich so viel zu verstehen wie nötig. Bei mir klappt das aber für das Base-Basic noch nicht. Mir fehlen noch die Grundverständnisse. Ich lese noch und noch und teste noch und noch aber die Erfolge stellen sich noch nicht ein. Dazu ist mir die spez Basic-Sprache doch zu fremd.

Also was habe ich geändert:
Ich habe mal noch eine Spalte "Art" hinzugefügt, weil ich ein weiteres Sortierkriterium einfügen wollte - im Beispiel ist es der Monat des Geburtstages -. Dann habe ich versucht eine Ansicht ähnlich der "MonatZ" zu erstellen (vgl mein vorheriger Beitrag) geht aber aus den oben genannten Gründen nicht und ist deshalb auch nicht gespeichert.

Im Anhang also meine Bemühungen. Der Bericht sollte so ähnlich aussehen wie das Formular "Test1" nur eben als Bericht ohne die Tabellenfelder.

Vielen Dank im Voraus dem "arbeitenden Volk" für die Mühen

Gruß
Frewer
DBTest.odb
(16.75 KiB) 7-mal heruntergeladen

Antworten