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 ) -- Retour: Beim Aktualisieren ändert sich die Verlinkung - korrigiert.
Dann hier:
/* Meine Datenbank ist Firebird SQL 1.5
Ich hoffe, die Unterschiede sind nicht zu gravierend.
Hier die Tabellen, aus denen ich aktuell Daten abrufen muss mit den wichtigsten Feldern */
CREATE TABLE kunden (
KUNDENNR INT, ADRESSGRP CHAR(6), NAME CHAR(40), STRASSE CHAR(40), PLZ CHAR(9), ORT CHAR(30),
NM_BEAT CHAR(20), NM_KRANK_KASS CHAR(2), NM_KVNR CHAR(20), NM_GEBDAT DATE, NM_STATUS CHAR(5)
);
CREATE TABLE beleg (
BELEGTYP CHAR(1), BELEGART CHAR(5), BELEGNR INT, BELEGDAT DATE, ADRESSNR INT, NAME CHAR(40), STRASSE CHAR(40), PLZ CHAR(9), ORT CHAR(30), NETTO FLOAT, BRUTTO FLOAT
);
CREATE TABLE belegpos (
BELEGTYP CHAR(1), BELEGART CHAR(5), BELEGNR INT, ADRESSNR INT, ARTIKELNR CHAR(30), ARTTEXT TEXT, GESAMT FLOAT, NM_HILFSNR CHAR(30), NM_HMKZ CHAR(2), NM_HMVERSZEIT CHAR(2), NM_VERSZEIT_VON DATE, NM_VERSZEIT_BIS DATE
);
CREATE TABLE serien (
HERSTSERNR CHAR(20), TEXT1 CHAR(40), KUNDENNR INT, ARTIKELNR CHAR(30), LILIDAT DATE, KENNUNG CHAR(20)
);
CREATE TABLE artikel (
ARTIKELNR CHAR(30), WGR CHAR(6), ARTTEXT CHAR(255), NM_HIMINR CHAR(139
);
Alles anzeigen
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.
/* 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:
/* &&SQL1
Alle Aktiven Kunden */
select KUNDENNR
from kunden
where
KUNDENNR < 40000 and
ADRESSGRP in ("1", "11") and
PLZ <> ""
;
/* &&SQL2
Geräte, die den aktiven Kunden zugebucht sind */
select SNR.KUNDENNR, SNR.ARTIKELNR, SNR.TEXT1 ARTIKEL, SNR.HERSTSERNR, SNR.LILIDAT LIEFDAT, SNR.KENNUNG
from "&&SQL1" KD
left join serien SNR
on KD.KUNDENNR = SNR.KUNDENNR
order by KD.KUNDENNR
;
/* ### Hier würde ich noch eine Abfrage auf die Tabelle "artikel" brauchen mit den SNR.ARTIKELNR aus der vorigen Abfrage
Aus der Tabelle benötige ich: artikel.WGR und artikel.NM_HIMINR ### */
/*
Ergebnistabelle=Aktive_KD_SN.dbf
*/
/*--------------------------------------------------------------------*/
Alles anzeigen
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?
/*--------- PAUSCHALPOSITION & ZUZAHL FÜR KD-NR ---------------------
So funktioniert es für eine KUNDENNR/ADRESSNR.
Ich brauch das für alle KDNR aus der Abfrage:
select KUNDENNR
from kunden
where
KUNDENNR < 40000 and
ADRESSGRP in ("1", "11") and
PLZ <> ""
order by
KUNDENNR
;
*/
/* &&SQL1
LETZTES RE-DATUM AUSSER ZUZAHL FÜR KD-NR*/
select max(BELEGDAT) DATUM
from beleg
where
BELEGTYP = "V" and
BELEGART = "RE" and
BRUTTO > 10 and
ADRESSNR = 18489
;
/* &&SQL2
BELEG(E) AUSSER ZUZAHL FÜR KD-NR VON DATUM=MAX_DAT */
select a.BELEGNR, a.BRUTTO
from beleg a, "&&SQL1" b
where
a.ADRESSNR = 18489 and
a.BELEGTYP = "V" and
a.BELEGART = "RE" and
a.BELEGDAT = b.DATUM
;
/* &&SQL3
BELEGPOS ABFRAGEN FUER "SQL2" */
select
a.ARTIKELNR, a.TEXT, a.NM_HILFSNR HIMINR, a.NM_HMKZ HIMIKZ, a.NM_HMVERSZEIT VERSZEIT,
a.NM_VERSZEIT_VON VON, a.NM_VERSZEIT_BIS BIS, a.GESAMT
from belegpos a, "&&SQL2" b
where
a.BELEGTYP = "V" and
a.BELEGART = "RE" and
a.BELEGNR = b.BELEGNR and
a.ARTIKELNR not in("vpe")
;
/*--------------------------------------------------------------------*/
Alles anzeigen