Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   delphi 10 Sql Abfrage (https://www.delphipraxis.net/201617-delphi-10-sql-abfrage.html)

concept2015 7. Aug 2019 18:56

Datenbank: Sqlite • Version: 3 • Zugriff über: Firedac

delphi 10 Sql Abfrage
 
Hallo liebe Spezialisten,
seit 3 Tagen versuche ich eine Abfrage zu erstellen :oops:
Hintergrund:
Sql Datenbank mit meheren Tabellen
Tabelle 1: Stamm
Felder u.a.
Anzeigen Bsp: J
Name Bsp: Wilhelm Mueller
Tournr Bsp: 1

Tabelle Zwischen:
Felder u.a.
Wer Bsp: Wilhelm Mueller
Tour Bsp: 2
Tageszahl Bsp: 20190725

Abfrage:
Col1: Zeige Distinct Name aus Stamm Where Anzeigen ="J" and TourNr="2"
Col2: Zähle alle Einträge in Zwischen (auch 0) where Tour="2" and Tageszahl zwischen 20190725 und 20190701

Ich hab mir die Augen wundgelesen und getestet ... ich kriege es nicht zusammen :oops:

Könnte mir BITTE jemand weiter helfen ?:roll:

jobo 7. Aug 2019 19:25

AW: delphi 10 Sql Abfrage
 
Du musst wohl etwas konkreter werden.
Ein Stück Delphi Code, eine SQL Abfrage, eine Fehlermeldung, ...

Wie sind Deine Delphikenntnisse? Wie sind Deine SQL Kenntnisse? (Wo darf man das Problem vermuten?)

Ins Blaue hinein wirst Du keine hilfreiche Antwort erhalten.

Wenn Du eine SQLITE Datei / Datenbank hast, ist der erste Hinweis:
Nimm irgendein SQL Tool, das SQLITE spricht und mache die Abfrage darin, solange bis sie funktioniert.
Wenn das bereits problematisch ist, kannst Du Dich auch dazu hier mit konkreten Fragen melden.

blawen 7. Aug 2019 20:00

AW: delphi 10 Sql Abfrage
 
Zitat:

Zitat von jobo (Beitrag 1440026)
Du musst wohl etwas konkreter werden.
Ein Stück Delphi Code, eine SQL Abfrage, eine Fehlermeldung, ...

Wie sind Deine Delphikenntnisse? Wie sind Deine SQL Kenntnisse? (Wo darf man das Problem vermuten?)

Ins Blaue hinein wirst Du keine hilfreiche Antwort erhalten.

Wenn Du eine SQLITE Datei / Datenbank hast, ist der erste Hinweis:
Nimm irgendein SQL Tool, das SQLITE spricht und mache die Abfrage darin, solange bis sie funktioniert.
Wenn das bereits problematisch ist, kannst Du Dich auch dazu hier mit konkreten Fragen melden.

Hier kann ich mich nur anschliessen.
Ich vermute mal, dass es um eine "Inner Join" Abfrage (oder ähnlich) geht. Um weiterhelfen zu können, muss Du uns mindestens folgende Daten liefern:
- Die Struktur der involvierten Tabellen, zumindest die relevanten Tabellen und Feldnamen
- Dein bisheriger SQL-Ansatz
- Allfällige Fehlermeldungen

Nur so kann festgestellt werden, ob z.B. Feldnamen unterschiedlich lauten oder die Abfrage grundsätzlich am falschen Ort ansetzt

p80286 7. Aug 2019 21:24

AW: delphi 10 Sql Abfrage
 
Zitat:

Zitat von concept2015 (Beitrag 1440022)
Abfrage:
Col1: Zeige Distinct Name aus Stamm Where Anzeigen ="J" and TourNr="2"
Col2: Zähle alle Einträge in Zwischen (auch 0) where Tour="2" and Tageszahl zwischen 20190725 und 20190701

Dann zeig mal deinen SQL-Text und schreib woran Du festmachst daß etwas nicht funktioniert.
Und wenn Du überhaupt keinen blassen Schimmer hast, dann solltest Du das auch schreiben.

Gruß
K-H

jobo 8. Aug 2019 07:18

AW: delphi 10 Sql Abfrage
 
Zitat:

Zitat von concept2015 (Beitrag 1440022)
Ich hab mir die Augen wundgelesen und getestet

Es gibt ein paar Ansätze, die es Dir und den Helfern erleichtern, die Aufgabe zu lösen.
Aus Deiner Anforderung für die Abfrage geht hervor, dass Du die Daten aus 2 Tabellen kombinieren willst.
Anhand welchen Feldes? Nicht mittels Name oder?

Für sowas ist es gut, den Tabellenaufbau genau zu kennen. Nimm irgendein Tool und lese die Tabellen Create Statements aus und poste es hier.
Wenn Du weiter an den Abfragen arbeitest: Versuche Teilergebnis- und wenn es nur eine Spalte ist- hinzukriegen. Man kann daraus Stück für Stück das Endergebnis bauen.

Also reduzier die Komplexität, vergiß erstmal Delphi, nimm ein Datenbanktool und leg damit los.

concept2015 8. Aug 2019 08:48

AW: delphi 10 Sql Abfrage
 
Dann muss ich es etwas genauer beschreiben.
Die Datenbank wurde nicht von mir erstellt.
In der Tabelle Zwischen habe ich gegenüber der Frage oben das Feld Tageszahl
durch die Felder Jahr und Woche_Nr eingesetzt.

Database: [Stammdaten]
Connection: read-write
File name: E:\Abr\AbrDB\Stammdaten.db
File size: 21176320 bytes
Page size: 4096
Encoding: UTF-8

Table [Stamm] // Stammdaten mit Kunde und Fahrer soll alle
aktiven Kunden von Tour 1 anzeigen
(Tour 1 ist ein Fahrer)
Felder:
[anzeigen]: CHAR(1) // Kunde aktiv = J nicht aktiv = N
[Name]: CHAR(30) // Kundenname
[TourNr]: CHAR(1) // Nr. des Fahrers 1 bis 9

Table [zwischen] // Bewegungsdaten: Pro Besuch 1 Eintrag
Fahrer (Tour) 1 war bei (Kunde) im (Jahr) 2019
in (Woche) 31 ......
Felder:
[WER]: CHAR(30) // Kundenname aus Stamm
[Tour]: CHAR(1) // entspr. Nr. des Fahrers
[Jahr]: CHAR(4) // Beispiel: 2019
[Woche_Nr]: CHAR(4) // Beispiel: 31


Die Abfrage (in Delphi) soll folgendes zeigen:
Alle aktiven Kunden von Tour 1 und die Anzahl der Besuche in der Woche 31

Aus Stamm / Aus Zwischen
Kunde Besuche
*************************
Schuster 1
Müller 0
Weber 2
Fleischer 0
Irgendwer 4
SchlagMichTot 1
*************************
order by Name

Ich hoffe, dass diese Variante meiner Frage leichter zu verstehen ist.
Irgendwie habe ich nur ein schwarzes Loch im Kopf, wenn ich versuche diese Abfrage zu erstellen - oder ich bin zu alt für sowas :wink:
Danke für Eure Bemühungen !

TigerLilly 8. Aug 2019 08:57

AW: delphi 10 Sql Abfrage
 
Das

Code:
select name from stamm s
join zwischen z on z.tour=s.tournr
liefert die alle Touren für alle Kunden. Du willst aber etwas weniger:

Code:
select name from stamm s
join zwischen z on z.tour=s.tournr
where s.tour='1' and z.woche_nr='31'
Du willst aber nicht die Touren gelistet, sondern nur die Anzahl:

Code:
select Name, Count(*) from stamm s
join zwischen z on z.tour=s.tournr
where s.tour='1' and z.woche_nr='31'
group by z.woche, s.name
Je nach DB-System musst du die Groß/Klein-Schreibung anpassen.

Die Tabelle ist nicht von dir erstellt - wenn du trotzdem Feedback dazu haben willst, sag es.

jobo 8. Aug 2019 09:12

AW: delphi 10 Sql Abfrage
 
Die Woche muss da ins Group wohl nicht rein, stört aber vielleicht auch nicht.
Ob der Join überhaupt sein muss, wenn alle Daten in "Zwischen" stehen?

Was ich zum Thema Arbeitserleichterung meinte:
So ein Statement liefert die Tabellendefinition
Code:
SELECT name, sql FROM sqlite_master
 WHERE type='table' and name = 'meineTabelle'
 ORDER BY name;
Dann ist es nur noch copy/paste und im Forum kann das jeder verstehen.

concept2015 8. Aug 2019 09:53

AW: delphi 10 Sql Abfrage
 
Select distinct Name from Stamm
where Anzeigen = "J"
and TourNr = "1"
order by Name

Liefert mir nur die aktuellen Kunden von TourNr 1 - genau das brauche ich
*********************
Name
Kalkm. Do Mitte1
Kalkm. Do Mitte2
Kalkm. Do Mitte3
Hammer Hagen
Faltenb. Witten
**********************
Jetzt soll hinter jedem Namen die Anzahl der Besuche aus Zwischen
(auch Null) stehen, die von Tour 1 im Jahr 2019 und Woche 31 bei diesem
Kunden waren.

Select Count(*) as Anz from zwischen
where Wer = (Name aus Stamm) !!
and Jahr = "2019"
and Woche_Nr = "31"
and Tour = "1"

*********************
Anz
1
1
0
4
2
**********************

Das alles in einer Abfrage sollte das Ergebnis bringen:
******************************
Name Anz
Kalkm. Do Mitte1 1
Kalkm. Do Mitte2 1
Kalkm. Do Mitte3 0
Hammer Hagen 4
Faltenb. Witten 2
*******************************
die ich nicht zusammen bekomme.

p80286 8. Aug 2019 10:03

AW: delphi 10 Sql Abfrage
 
Die Vorschläge von Tiger Lilly hast Du schon gesehen?
Sein letzter solte eigentlich das ergeben was Du willst?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz