Autor Beitrag
Hänsel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Mi 22.02.17 12:57 
Hallo ich habe zur Summenbildung eine Frage:

Ich habe eine SQL-Tabelle Verein und eine SQL-Tabelle Mitglieder. Ich möchte aus der Tabelle Mitglieder (Feld Punkte)alle Punktzahlen zusammen addieren und in die Tabelle Verein in das Feld Ergebnis schreiben.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var such : String;
Begin
such:=DataModule1.ADOQuery_Verein['ID']; //es gibt mehrere Vereine, hier wurde einer herausgesucht
      DataModule1.ADOQuery_Mitglieder.Close;
      DataModule1.ADOQuery_Mitglieder.SQL.Text:='Select *, SUM(Mitglieder.Punkte) From Mitglieder Where ID ='+such+'';
      DataModule1.ADOQuery_Mitglieder.Open;


mit dieser variante komme ich nicht weiter. Es gibt sicher andere Lösungen aber diese ist sicher die schnellste. Kann da jemand helfen.

Danke im Voraus
Hänsel

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1576
Erhaltene Danke: 277


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 22.02.17 13:25 
Das dürfte irgenwie so aussehen:

ausblenden SQL-Anweisung
1:
update verein set ergebnis = (select sum(punkte) from mitglieder where verein_id = verein.id);					


Aber so hast Du ja eine Information doppelt (das Ergebnis ist ja nur die Summe der Punkte). Und wenn sich die Punktzahl bei einem Mitglied ändert, oder ein Mitglied hinzugefügt oder gelöscht wird, müsste immer das Ergebnis neu berechnet werden. Sowas vermeidet man beim Datenbankdesign tunlichst. Dafür muss man dem Chef schon gute Gründe vortragen können, wenn man das wirklich will.

Denn man könnte es ja auch einfach abfragen:
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
select
  v.*,
  sum(m.punkte) as ergebnis
from verein v
left outer join mitglieder m on (m.verein_id = v.id)
group by v.id;


Ob die Syntax im Detail so funktioniert hängt von der Datenbank ab, die Du verwendest. Aber ungefähr so müsste es bei jeder Datenbank aussehen mit vielleicht kleinen Abweichungen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Hänsel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Do 02.03.17 21:20 
Dankefür die Hilfe.

Hänsel