• Ich muss aus unsere Firebird SQL Datenbank alle Daten für unsere aktiven Kunden in eine Excel Tabelle überführen.
    Der Export ist kein Problem, da lasse ich das Ergebnis einer Abfrage einfach in eine *.dbf ausgeben.

    Problem ist die Verknüpfung der Daten aus den vielen Tabellen.

    Die Struktur der Datenbank habe ich mit den im Moment wichtigen Tabellen & Feldern hier beschrieben: https://www.db-fiddle.com/f/8h4pVQYEibvQsiohuuNw8i/2

    Hab gerade gesehen, dass auf der Seite meine Einträge nicht sichtbar sind, wenn ich es über den Link aufrufe (zu hoch für mich :whistling:) -- Retour: Beim Aktualisieren ändert sich die Verlinkung - korrigiert.

    Dann hier:

    Ausreichend sinnvoll verknüpfte Datensätze zu erstellen, ist jetzt aber zu aufwändig. Ich hoffe, es wird auch so verständlich.

    Ich habe eine Tabelle "kunden". Daraus ziehe ich mit einer Abfrage eine Liste mit KUNDENNR.
    Ich brauche noch einige andere Felder aus der Tabelle, aber das hier ist meine Basisabfrage, da die KUNDENNR über alle Tabellen verbindet.

    SQL
    /* Alle Aktiven Kunden */
    select KUNDENNR
    from kunden
    where
     KUNDENNR < 40000 and 
     ADRESSGRP in ("1", "11") and
     PLZ <> ""
    ;
    /*--------------------------------------------------------------------*/


    Ich möchte den Kunden zugebuchte Geräte abfragen:


    In einer Tabelle "beleg" sind alle Belege mit BELEGTYP, BELEGART, BELEGNR, BRUTTO, BELEGDAT gespeichert
    In einer Tabelle "belegpos" sind alle Belegpositionen mit BELEGTYP, BELEGART, BELEGNR, ARTIKELNR, GESAMT gespeichert.
    Für einen einzelnen Kunden kann ich erforderliche Werte aus den Tabellen abfragen. Aber ich brauche es für alle.

    Das folgende müsste also wie eine Schleife für alle Kunden aus der Kundenabfrage ausgeführt werden. Wie geht das?

  • Hi BugFix 👋 ,

    ich kann noch nicht alles bis zum Ende durchlesen und berücksichtigen - Antwort folgt also noch. Jedoch habe ich per ChatGPT zu den CREATE TABLE Statements passende INSERT INTO Statements generieren lassen. Diese sind hier einzusehen, damit du, ich oder anderer Helfende direkt mit diesen Daten arbeiten können.

    Au3Forums/autoit-de/88398-sql-fragen at main · Sven-Seyfert/Au3Forums
    This repository is used for helping people in the german and english AutoIt forums. - Sven-Seyfert/Au3Forums
    github.com


    Einfach die sqlite.db via https://sqliteonline.com/ laden und dort dann die entsprechenden Queries ausführen. So zumindest meine naive Annahme ohne (wie gesagt) alles bewertet/gesichtet zu haben.

    Viele Grüße
    Sven

  • Hi BugFix 👋 ,

    Ich möchte den Kunden zugebuchte Geräte abfragen:

    Hier schon mal (endlich 😅), der erste Teil. Bitte passe die Werte wieder an deinen Tabelleninhalte an, denn dies sind die generierten Werte von ChatGPT. Es geht eigentlich nur um den 3. Block, die beiden davor sind nur zur Herleitung. Falls du es mit https://sqliteonline.com/ direkt nachstellen willst. Die Daten sind bereits in der Datenbank vorhanden (sqlite.db ==> GitHub link oben).

    Zur Erklärung:
    Ein Join, inner join aber man kann "inner" weglassen, gibt dir die Schnittmenge zweier (oder mehrerer) Tabellen auf Grund der zugehörigen Spalten. Diese Verbindung wird mit "ON" definiert. Nun kannst du auf Grund der Aliasse "k" für Kunden, "s" für Serien usw. im SELECT einzelne Spalten der jeweiligen Tabelle auflisten. Die WHERE Klausel verhält sich ganz normal wie bei deinen bisherigen Abfragen, nur das du darauf achten solltest, die richtigen Aliasse zu nutzen.

    Ebenfalls wichtig ist, bei "outer joins" wie (left outer join oder right outer join)), ist die Reihenfolge von wo du nach wo gehst in den Tabellenbeziehungen relevant. In deinen Fall hier egal, da ein inner join genutzt wird. Siehe bitte die Grafik (Join ist verlinkt).

    -----------------------

    Für das zweite Szenario brauche ich noch etwas Zeit. Melde mich wieder.
    Hoffe aber erstmal, dass dies passt und verständlich ist 🤞 .

    Viele Grüße
    Sven

  • So, ich war leider etwas unter Zeitdruck, weil mein Chef natürlich gaaanz dringend die Resultate wollte.

    Habe jetzt kurzerhand einfach alle betroffenen Tabellen in CSV Dateien exportiert. Und den Rest hat AutoIt erledigt.
    Einlesen in Arrays, Datensätze auswerten und verknüpfen - die Auswertelogik in AutoIt zu schreiben ging (für mich) deutlich schneller als mich noch länger intensiv mit SQL Fallstricken zu quälen. :rofl:

    Nochmals Danke für Eure Bereitschaft.

  • Alles klar 👌 .

    Dann mache ich mir nicht die Mühe um den Rest zu beschreiben bzw. zu zeigen, auch gut.

    Vielleicht für das nächste Mal, wenn du erneut so'n Fall hast wie dein zweites Szenario. Da ist es nicht nur das Kombinieren von Tabellen und Spalten sondern das Durchlaufen der Daten mit mit einem "Cursor". Damit kannst du Teilergebnisse innerhalb der Loop finden und nutzen, für weitere Queries und diese dann zu einem Gesamtergebnis kummulieren. Also einfach ausgedrückt, eine Schleife, aber in ANSI SQL (was auch Firebird Standard ist), ist dies anders benannt, umständlicher als man es kennt - aber es geht 😅 .

    Viele Grüße
    Sven