Entwickler-Ecke
Datenbanken - Datenzusammenstellung mittels SQL aus untersch. DB-Feldern
Zemke - Do 17.10.02 09:02
Titel: Datenzusammenstellung mittels SQL aus untersch. DB-Feldern
Hallo,
ich habe folgendes Problem:
ich habe ein Verwaltungsprogramm für Schuldner geschrieben in dem alle Rechnungen enthalten sind, die noch bezahlt werden müssen. Je 6 Rechnungsfelder habe ich dafür vorgesehen. Sie sind so unterteilt:
Auftragsnummer (DBEdit1-DBEdit6), Rechnungssteller (DBEdit7-DBEdit13), Betrag (DBEdit14-DBEdit20), Belastungsfolge (DBEdit21-DBEdit22-DBEdit28).
Die Vorgänge können zu unterschiedlichen Zeiten geschrieben werden, d.h. wenn eine Rechnung noch fehlt und es sind schon drei andere vorhanden, kann eine Belastung mit der Rangfolge 1 erfolgen.
Es soll jetzt die Möglichkeit gegeben sein, daß alle noch offenen Rechnungen ausgewertet werden können. Dies soll in einer einzigen Liste
geschehen in nach Rechnungsstellern aufsteigender Reihenfolge.
Mir fehlt nun der SQL-Befehl für diese umfangreiche Abfrage. Es werden je 6 Felder angesprochen. Ich hab es schon mit Platzhaltern versucht, klappt aber alles nicht!
Beispiel:
select anr1,rech1name,bel1 from Datei.db where rech1name>'0' and bel1 is null
Funktioniert - ist ja auch eine einzelne Abfrage.
Wie gesagt, mir fehlt der Befehl daß diese Abfrage 6 mal durchläuft
anr1-anr6,rech1name-rech6name,bel1-bel6
Übrigens: Später sollen mit diesen gefilterten Daten auch noch Briefe an Firmen geschrieben werden können.
Wenn der Sachverhalt zu kompliziert ist, schickt mir eine e-mail:
rainer.zemke@gsg-oldenburg.de - Danke!!!
Steffer - Do 17.10.02 15:53
Zur Frage:
Dein Ansatz
select anr1,rech1name,bel1 from Datei.db where rech1name>'0' and bel1 is null
ist ja schon richtig. Nur must du das eben jetzt auf 6 Felder bringen.
select * from Datei.db where (rech1name>'0' and bel1 is null) or (rech2name>'0' and bel2 is null) or (rech3name>'0' and bel3 is null) .....
Dein Select würde ich der Faulheit halber auf ein * ausdehnen... Ansonsten kannst du die Abfrage mit 2 Schritten optimieren.
Zum Aufbau:
So wie ich das verstanden habe, hast du pro Datensatz 6 Aufträge und Rechnungen in EINEM Datensatz.
Wenn dem so ist, vewende pro Datensatz einen Auftrag und eine Rechnung und frage dann halte eben so ab:
SELECT * From DB WHERE (...siehe oben ...) and Kundennummer = :DeineKundennummer
Die Einschränkung auf 6 macht dir die Megaarbeit, wenn es doch mal 7 oder 8 werden sollen.
Zemke - Fr 18.10.02 10:36
Titel: Datensortierung
Erst einmal vielen Dank für Deine Antowrt.
Mir geht es aber auch darum, daß die Daten aufsteigend sortiert werden
(Rech1name - Rech6name) und daß nur die drei Spalten Whg.-Nr., Auftrag und Rechnungssteller in der Liste dargestellt werden. Wie ist es dann mit dem Platzhalter ' * ' ?
Mir geht es auch darum, daß j e d e r offene Auftrag gezeigt wird und nicht nur die Whg.-Nr. (Datensatz)!
Mich macht das "or" etwas stutzig. Heißt es dann nicht, daß der Befehl zu einer "entweder - oder" - Anweisung wird?
Das darf er auf keinen Fall, denn es sollen alle offenen Rechnung in der Liste stehen, die in den Feldern Rech1name - Rech6name enthalten sind.
Gruß
Rainer Zemke
LCS - Fr 18.10.02 11:16
Hi
| Zemke hat folgendes geschrieben: |
Mir geht es aber auch darum, daß die Daten aufsteigend sortiert werden
(Rech1name - Rech6name) ...
|
Das dürfte bei der vorliegenden Struktur leider unmöglich sein. Du kannst zwar eine Sortierfolge angeben mit
Order by aber du kannst keine Gesamtsortierfolge aus den 6 Feldern machen.
| Zemke hat folgendes geschrieben: |
...daß nur die drei Spalten Whg.-Nr., Auftrag und Rechnungssteller in der Liste dargestellt werden. Wie ist es dann mit dem Platzhalter ' * ' ?
|
Ersetze einfach Select * durch Select WhgNr, Auftrag, Rechnungssteller.
| Zemke hat folgendes geschrieben: |
Mich macht das "or" etwas stutzig. Heißt es dann nicht, daß der Befehl zu einer "entweder - oder" - Anweisung wird?
|
Das ist schon korrekt. Der Datensatz wird dann angezeigt, wenn in einem der 6 Felder ein Eintrag vorhanden ist.
| Steffer hat folgendes geschrieben: |
Die Einschränkung auf 6 macht dir die Megaarbeit, wenn es doch mal 7 oder 8 werden sollen.
|
Das ist noch Milde ausgedrückt. Das Problem fängt ja schon mit deiner Sortierfolge an. :autsch: An deiner Stelle würde ich das nochmal überdenken. Sich wiederholende Informationen gehören generell in eine eigene Tabelle.
Gruss Lothar
Steffer - Fr 18.10.02 12:39
LCs hat dir das wesentliche ja schon gesagt:
>Das dürfte bei der vorliegenden Struktur leider unmöglich sein. Du
>kannst zwar eine Sortierfolge angeben mit Order by aber du kannst
>keine Gesamtsortierfolge aus den 6 Feldern machen.
Geht schon, aber nicht mit der Abfrage.
Dazu müstest du die Daten auslesen, sortieren und ausgeben. Das ganze ist aber ein Luftanker und nicht der Sinn der Sache...
Daher würde ich dir auch noch mal empfehlen die Strukturierung zu überdenken.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!