Laden...

Brauche etwas Hilfe bei Logik in Tabellen - Update

Erstellt von markuss21 vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.018 Views
M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
Brauche etwas Hilfe bei Logik in Tabellen - Update

Hi,
ich kämpfe mit dem folgenden Problem. Ich muss ein kleines Tool schreiben um eine Sachkonten Tabelle zu aktualisieren.
Das Schema schaut folgendermaßen aus:
KontoNr Organisation Periode Summe_Haben PeriodeBetrag
8000 100 01.01.2006 0 NULL
8500 100 01.02.2006 1500 NULL
9000 100 01.03.2006 500 NULL
9500 200 01.02.2006 0 NULL
9800 200 01.02.2006 50000 NULL

So nun soll die PeriodeBetrag - Spalte aufsummiert werden. sortiert wie oben. Also nach Kontonr, Organisation, Periode
Das heißt für den Monat Januar sollte die Spalte dann so ausschauen:

PeriodeBetrag
0
1500
2000

Datenbankverbindungen sind kein Problem. Nur die Schleife, mit der ich die Updates abschicken kann bekomme ich einfach nicht hin !

Über Hilfe wäre ich sehr dankbar !

Markus ?( ?( ?(

P
157 Beiträge seit 2006
vor 17 Jahren

Hallo Markuss21,

nur mal so zum Verständnis. Ich sehe nicht wo und was für einen Update du haben möchtest.
Was ich rauslesen kann an deinem Beitrag ist das du 'lediglich' die vorhandenen Daten aufsummiert nach PeriodeBetrag anzeigen lassen möchtest.

Mir welcher Datenbank arbeitest du?

Gruß
purplestar

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
Update

Ich möchte dass die Spalte PeriodeBetrag in der Tabelle aktualisiert wird. Eben so wie ich das dann im Beispiel notiert habe.
Ich nutze den SQL 2005 Developer.

Komme da einfach nicht weiter 😦

P
157 Beiträge seit 2006
vor 17 Jahren

Kann irgendwie immer noch nicht ganz folgen.

Eigentlich müsstest du doch vor einem Update nur die Summe der bisherigen Werte bilden und diese mit dem neu hinzuzfügenden Wert addieren.
Dann müsste dein 'PeriodeBetrag' eigentlich so aussehen wie du es wünscht.

KontoNr Organisation Periode Summe_Haben PeriodeBetrag
8000 100 01.01.2006 0 NULL
8500 100 01.02.2006 1500 NULL
9000 100 01.03.2006 500 NULL
9500 200 01.02.2006 0 NULL
9800 200 01.02.2006 50000 NULL

Ich sehe da nur einen Eintrag für Januar und zwar dem hier: '8000 100 01.01.2006 0 NULL'

So nun soll die PeriodeBetrag - Spalte aufsummiert werden. sortiert wie oben. Also nach Kontonr, Organisation, Periode
Das heißt für den Monat Januar sollte die Spalte dann so ausschauen:

PeriodeBetrag
0
1500
2000

Wie kann es da zu dieser Aufsummierung kommen? 🤔

Gruß
purplestar

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
Summierung

Eben die Haben-Summen werden aufsummiert und das immer für 1 Jahr und sortiert nach Datum

P
157 Beiträge seit 2006
vor 17 Jahren

Original von markuss21
Eben die Haben-Summen werden aufsummiert und das immer für 1 Jahr und sortiert nach Datum

Warum so kompliziert? So würde ich das nicht machen.
Überlege mal ob soviel Rechnerei und Logik in eine Tabelle gehören sollte. Erst muss geprüft werden ob Perioden_Haben vom Monat her zur Periodensumme passt, dann ob das Jahr dazu stimmt, zu guter Letzt soll dann noch ein Update stattfinden.. viel Arbeit für wenig Ziel.

Ich würde einfach eine Abfrage basteln die dir die gewünschten Aufsummierungen pro Jahr/Monat anzeigt und die Detailsätze in der Ursprungstabelle einfach so stehen lassen wie sie sind, ohne zu wursten.

Gruß
purplestar

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
Abfrage

Sowas geht mit SQL Abfragen ?

Daran bin ich nämlich am Anfang gescheitert. Kannst du mir vielleicht da weiterhelfen ?

Wäre super !
Dankeschön.

Gruß
Markus

P
157 Beiträge seit 2006
vor 17 Jahren

Ich versuche es mal:

also, ich habe erstmal die Quelltabelle mit mehr Spieldaten gefüllt:

KontoNr Organisation Periode Summe_Haben
8000 100 01.01.2006 250
8000 100 01.01.2006 150
8000 100 01.01.2006 250
8000 100 01.02.2006 0
8500 100 01.02.2006 750
8500 100 01.01.2006 1500
9000 100 01.03.2006 500
9000 100 01.03.2006 500
9500 200 01.02.2006 100
9500 200 01.02.2006 0
9800 200 01.02.2006 50000
9800 200 01.02.2006 50000

Dann mache ich folgende Abfrage:

SELECT Periode, KontoNr, Organisation, Sum(Summe_Haben) AS Summe_Periode
FROM Tabelle1
GROUP BY Periode, KontoNr, Organisation
ORDER BY Periode, KontoNr, Organisation;

und erhalte dieses Ergebnis.

Periode KontoNr Organisation Summe_Periode
01.01.2006 8000 100 650
01.01.2006 8500 100 1500
01.02.2006 8000 100 0
01.02.2006 8500 100 750
01.02.2006 9500 200 100
01.02.2006 9800 200 100000
01.03.2006 9000 100 1000

Die Sortierreihenfolge kannst du dann natürlich beliebig anpassen (ORDER BY, GROUP BY).

Gruß
purplestar

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
Problem

Danke für die den SQL.
Leider summiert er die Werte nicht auf. Anbei habe ich das ganze nochmals als Excel Sheet zur besseren Erklären. Danke für die Zeit und die Hilfe !

Gruß und einen schönen Abend

Markus

P
157 Beiträge seit 2006
vor 17 Jahren

Hallo Markus,

Sorry, da bin ich mit meinen SQL-Kentnissen auch am Ende.
Wahrscheinlich kann man das irgendwie mit T-SQL lösen, ich allerdings würde dann eher das Update mittels C# versuchen sprich 'PeriodeBetrag' per Code errechnen.

Anhand deines Excel Sheets sehe ich das du 'PeriodeBetrag' immer aus 'Summe_H' aktueller Tag + 'Summe_H' gestriger Tag bilden möchtest. Mir erschliesst sich nicht ganz warum, ich dachte zuerst du wolltest immer alle Tage eines Monats aufsummieren.

Falls mir noch eine Idee kommt werde ich mich melden.

Auch dir einen feinen Abend und Gruß
purplestar

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
c#

muss lieder für eine analyse so sein !

Hättest du für mich einen Ansatz wie ich das mit c# lösen könnte ?

P
157 Beiträge seit 2006
vor 17 Jahren

Original von markuss21
muss lieder für eine analyse so sein !

Hättest du für mich einen Ansatz wie ich das mit c# lösen könnte ?

Hallöchen,

müsste mich da selber erstmal genauer reindenken, wenn ich dazu komme könnte ich dir vielleicht morgen mehr dazu posten.

Bis dahin
purplestar

D
14 Beiträge seit 2006
vor 17 Jahren

Ich würde es etwa in der Art machen:
zuerst ein Query, der dir die Datensätze sortiert nach Orga und Periode zurückgibt:

SELECT Orga, Periode FROM Tabelle1 ORDER BY Orga, Periode

Durch das Resultset iterierst du durch und machst bei jedem Schritt etwas derartiges:

SELECT SUM(Summe_H) FROM Tabelle1 WHERE Orga = x AND Periode <= y

wobei x deine aktuelle Orga aus dem Resultset ist und y deine aktuelle Periode
Das was du da bekommst, kannst du dann mit

UPDATE Tabelle1 SET PeriodeBetrag = z WHERE Orga = x AND Periode = y

z ist hier dein SUM(Summe_H) von dem Query eins drüber.
Das lässt sich sicher auch irgendwie mit einer Stored Procedure in T-SQL lösen. Aber nicht mit mir 😁

Das ganze is zwar eher suboptimal und wird bei großen Datenmengen langsam werden. Aber wenn ich dein Problem richtig verstanden hab, tut (evtl.) es seinen Job.

Vielleicht hat purplestar ja morgen noch eine bessere Lösung 😉

M
markuss21 Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
c#

Mir ist leider noch nicht ganz klar wie ich das mit der Logik in C# umsetzen kann. Bekomme das mit dem Codieren einfach nicht hin 😦

3.728 Beiträge seit 2005
vor 17 Jahren
Ado.net

Du musst Dir erstmal die Grundlagen in ADO.NET (so heißt die Datenzugriffstechnologie in C#) aneignen. Folgende MSDN-Seite hilft Dir bestimmt dabei: http://www.microsoft.com/germany/msdn/library/net/adonet/ErsteSchritteMitADONET.mspx

Ansonsten möchte ich Dir an Herz legen, ein gutes C#-Buch zu lesen.