AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL- Summe je Zeile bilden - kummuliert

SQL- Summe je Zeile bilden - kummuliert

Ein Thema von MarcRB75 · begonnen am 22. Jun 2019 · letzter Beitrag vom 25. Jun 2019
Antwort Antwort
Seite 1 von 2  1 2   
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
41 Beiträge
 
Delphi XE2 Starter
 
#1

SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 22:11
Datenbank: AbsComponent • Version: 7.9 • Zugriff über: SQL-Query
Datenbank ist: Absolute Database

Hallo,

irgendwie stehe ich jetzt voll daneben

ich möchte per SQL Summen je Zeile bilden, diese soll kumuliert sein.

- Ich habe 3 Werte je Zeile. Diese sollen addiert werden und dieser Wert soll ich die 4. Spalte eingetragen werden.
- Falls kein Wert vorhanden ist, soll in dieser 4. Spalte der Wert von der vorherigen Zeile eingetragen werden.
- Fall ein Wert in der nächsten Zeile ist, so sollen diese Werte addiert werden und zum vorherigen Wert addiert werden,
der dann in der 4. Spalte steht.

- SIEHE ANHANG ... da sind die Abstände besser dargestellt.

Zeile Spalte1 Spalte2 Spalte3 Spalte4(Ergebnis per SQL eintragen)
1 100,00 2.500,00 300,00 2.900,00
2 100,00 3.000,00
3 3.000,00 (kein Eintrag ... wert von vorheriger Zeile übernehmen)
4 50,00 100,00 3.150,00


Also irgendwie geht das nicht.
Ich dachte, ich löse das am Besten mit SQL, denn dann geht es schneller,
denn ich habe eine Jahrestabelle (365 Zeilen).

Könnte mir bitte da jemand helfen oder weiß jemand, wie man das am Besten macht?

Vorab vielen vielen Dank.
Miniaturansicht angehängter Grafiken
bild.jpg  
Marc

Geändert von MarcRB75 (22. Jun 2019 um 23:25 Uhr)
  Mit Zitat antworten Zitat
jobo

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

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 22:49
Das ist nicht ganz trivial.
Was ist ABSComponent für eine Datenbank?

- Falls kein Wert vorhanden ist, soll in dieser 4. Spalte der Wert von der vorherigen Zeile eingetragen werden.
- Fall ein Wert in der nächsten Zeile ist, so sollen diese Werte addiert werden und zum vorherigen Wert addiert werden,
der dann in der 4. Spalte steht.
In Kurz und unter Berücksichtigung des Bildes:
Summiere 3 Spalten und addiere es auf die Summe der vorigen Zeile.
Der zweite Teil dieser Anforderung nennt sich auch "running total". Mit dem ersten Teil gibt es vermutlich keine Probleme.

"..vorige Zeile.."
Mit SQL kann man nicht ohne weiteres auf die vorige Zeile zugreifen. SQL arbeitet Mengen basiert und kennt keine Reihenfolge.
Es gibt Erweiterungen, die solche "Spreadsheet" Funktionen bieten, aber das kommt auf das Produkt an.

Man kann die vorige Zeile rausfinden, mit SQL, dafür braucht man aber eine eindeutige ID je Zeile und ein Kriterium, das die "Vorigkeit" definiert.

P.S.:
Wenn es sich um Absolute Database handelt, diese DB kann das wahrscheinlich nicht.
Wenn es (immer) nur um 365 Datensätze geht, braucht man es nicht mit SQL zu machen, sondern kann es im Programm berechen (auch wenn SQL bequemer wäre)
Wenn es um mehr geht und diese Anforderung oben nur der Anfang ist, sollte man nach einer anderen DB schauen. Z.B. Firebird, die lässt sich auch embedded nutzen und kann sowas wie Du oben nachgefragt hast per explizitem SQL, bequem und schnell. (Ein Sortierkriterium, also eine weitere Spalte, die solch ein Kriterium liefert, braucht man da aber auch.)
Gruß, Jo

Geändert von jobo (22. Jun 2019 um 23:01 Uhr)
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
41 Beiträge
 
Delphi XE2 Starter
 
#3

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:06
Hallo und Danke für Deine Antwort,

nun, die Datenbank ist so ähnlich wie das frühere Paradox, aber halt einfach besser und viel einfacher, was die
Anlage von Datenbanken ect betrifft. Ich war immer sehr zufrieden damit.

Der Link zur Seite:

http://www.componentace.com/bde_repl...e_database.htm

Nun zu Deiner Frage:
Eindeutig ist die ID, die je Zeile ja eindeutig erzeugt und auch fortlaufend ist.

zu der : "Kriterium, das die "Vorigkeit" definiert" ... mhhh...
kann man die "Werte" je Zeile nicht irgendwie durch eine Variable oder extra Spalte definieren?

Du meintest, mit dem Ersten Teil gibt es keine Probleme.
- Wie könnte ich das realisieren?
und geht das mit einer "laufenden" Variable nicht?

Es sind zwar "nur" 365 Zeilen, aber angenommen, in der 10 Zeile ändert man den Wert, müssen alle anderen 355 Zeilen angepasst und
durchgerechnet, und der Wert je Tag ja angepasst werden. Es wird halt vorher schon viel berechnet und da wollte ich das Ganze ggf.
nicht noch länger hinausziehen, bis der Wert oder besser gesagt die Werte alle angepasst sind.
Marc

Geändert von MarcRB75 (22. Jun 2019 um 23:25 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:16
Nur so am Rande bemerkt:
nun, die Datenbank ist so ähnlich wie das frühere Paradox, aber halt einfach besser und viel einfacher, was die
Anlage von Datenbanken ect betrifft. Ich war immer sehr zufrieden damit.

Der Link zur Seite:

http://www.componentace.com/bde_repl...e_database.htm
Wenn du gleich geschrieben hättest Absolute Database, dann hätte es dazu keine Nachfrage gegeben, denn so haben die diese Datenbank benannt und unter dem Namen ist diese auch bekannt.
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
41 Beiträge
 
Delphi XE2 Starter
 
#5

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:27
Ich konnte es jetzt auch nicht direkt ausbessern. Habe es aber oben vermerkt.
Hatte das geschrieben, weil es eben von dieser Firma ist.
Marc
  Mit Zitat antworten Zitat
Rainbow6

Registriert seit: 21. Mai 2019
20 Beiträge
 
#6

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:40
Also ohne jetzt das Problem und die DBE genauer zu kennen, könnt ich mir irgendwas in dieser Art vorstellen:
Code:
SELECT
   t1.id,
   t1.col1,
   t1.col2,
   t1.col3,
   (SELECT SUM(t2.col4) WHERE t2.id <= t1.id FROM table AS t2) AS xyz
FROM table AS t1
Sowas sollte in etwa den gewünschten Erfolg haben, glaube ich. Müsste das mal
Schnell mit irgendeiner Beispieltabelle durchlaufen lassen.

Gruß
Daniel
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
41 Beiträge
 
Delphi XE2 Starter
 
#7

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:41
Vielen Dank, ich versuche es gleich mal.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 22. Jun 2019, 23:49
Da wir den konkreten Aufbau der DB und die Abfrage nicht kennen müßen wir im unge0fähren bleiben.

Zunächst ist die ID nur der Identifier eines Datensatzes und hat nichts mit den anderen Datensätzen zu tun.

Nehmen wir an Du hast folgende Abfrage:
Select wert1,wert2,wert3 from myDB dann erhältst Du die erste Summe mit
Select wert1,wert2,wert3,(wert1+wert2+wert3) as summe1 from myDB Was den "vorherigen" Datensatz angeht, den gibt es nicht solange Du die Ergebnisdatensätze nicht sortierst. Erst dann liegt eine verlässliche Reihenfolge vor, vorausgesetzt das Sortierkriterium ist für jeden Datensatz eindeutig.
In Deinem Beispiel sieht es so aus, als gäbe es Datensätze in denen nicht alle Felder einen Wert ethalten, diesen müßte zuerst z.B. mit Coalesce ein Wert zugewiesen werden.

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

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
41 Beiträge
 
Delphi XE2 Starter
 
#9

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 23. Jun 2019, 01:28
Danke für Deine Antwort. Ich habe es versucht und hat auch geklappt. Nur zeigt er mir leider den Wert an und schreibt
ihn nicht in die DB hinein. Ich vermute, ich muss das irgendwie anders lösen.
Dankeschön trotzdem.
Marc
  Mit Zitat antworten Zitat
jobo

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

AW: SQL- Summe je Zeile bilden - kummuliert

  Alt 23. Jun 2019, 10:12
Ein "Select" selektiert Daten,
ein "Insert" fügt Daten ein.

Kombiniert man ein "Insert" und ein "Select", so fügt man selektierte Daten ein, jenachdem eine bis viele Zeilen.

Dann gibt es noch das "Update", damit werden einzelne Spalten in bestehenden Datensätzen aktualisiert.

Dazu solltest Du Dir vielleicht mal irgendwo ein kleines Grundlagentutorial anschauen.

Und zuletzt:
Normalerweise trägt man keine Daten in eine Tabelle ein, die man genauso auch per purem Selektstatement berechnen kann.
Du hast selbst weiter oben von "Änderungen ab dem 10. Datensatz mit dem daraus folgenden Neuberechnungsaufwand" geschrieben.

Man selektiert also nur dynamisch und berechnet die benötigten Daten ad hoc. So stimmen sie immer zum Zeitpunkt der Anzeige.

Es gibt natürlich auch immer wieder Gründe, es anders zu machen. Es kommt halt drauf an...
Gruß, Jo
  Mit Zitat antworten Zitat
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 11:59 Uhr.
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