AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

delphi 10 Sql Abfrage

Ein Thema von concept2015 · begonnen am 7. Aug 2019 · letzter Beitrag vom 9. Aug 2019
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 07:18
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.
Gruß, Jo
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#2

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 08:48
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
Danke für Eure Bemühungen !
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.248 Beiträge
 
Delphi 12 Athens
 
#3

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 08:57
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 09:12
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.
Gruß, Jo
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#5

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 09:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 10:03
Die Vorschläge von Tiger Lilly hast Du schon gesehen?
Sein letzter solte eigentlich das ergeben was Du willst?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#7

AW: delphi 10 Sql Abfrage

  Alt 8. Aug 2019, 10:44
Ja, den Vorschlag habe ich etwas angepasst -
liefert aber Ergebnisse, die ich nicht zuordnen kann.

select distinct Name, Count(*)as Anz from stamm s
join zwischen z on z.tour=s.tournr
where z.tour='1'
and z.Jahr = "2019"
and z.woche_nr='31'
and s.Anzeigen = "J"
group by z.woche_Nr, s.name

*****************************
Name Anz
Alphag 46
Witten Gieseke 46
Faltenb. Witten 46
Hammer Feinstahl 23
Kalkm. Bo Höntrop 46
Kalkm. Bo. Mitte 46
Kalkm. Do Hombruch 46
Kalkm. Do Hörde 46
Kalkm. Do Mitte 92
Kalkm. Düs. Mitte 46
******************************
Da stehen Zahlen 23 bis 92 hinter ... das kann nicht sein ...
Maximal 3 Besuche können es sein - es werden wohl alle
Besuche angezeigt.

Ich sag ja - Loch im Kopf - bei dieser Abfrage.
Trotzdem DANKE für Eure Bemühung.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz