Zum Inhalt springen

Access Datenbank - Summieren, Multiplizieren


Empfohlene Beiträge

Geschrieben

Mahlzeit!

Ich habe eine Access Datenbank in der ich 7 Tabellen habe. Ich muss jetzt die Kosten für ein Projekt ermitteln das Problem ist jedoch, das ich die Lohnerhoehungen mit einbeziehen muss und das alles mit SQL Statements. Könnte mir jemand helfen wie ich des hinkriegen könnte...

Also meine Tabellen sind:

- Kosten (Von, Bis, Lohngruppe, Std)

- Besuchte Abteilungen (AbteilungsNr, PersonalNr, Von, Bis)

- Abteilungen (AbteilungsNr, Abteilung)

- laufProjekte (ProjektID, PersonalNr, Stunden, Datum)

- Lohnerhoehung (PersonalNr, Erhoehung, Datum)

- Mitarbeiter (PersonalNr, Name, Vorname, Geburtstag, Straße, Plz, Ort, Aktiv, Lohngruppe, AbteilungsID)

- Proejtke (Projekt, ProjektID)

Kosten = Stunden für das Angefallene Projekt * den StdSatz der jeweiligen Lohngruppe (einschließlich der Lohnerhoehungen)

Die jeweilige Lohngruppe wird durch das Datum bei den laufProjekten definiert. Also laufProjekte.Datum muss zwischen Kosten.Von und Kosten.Bis liegen dann hat man die Lohngruppe.

Ich sollte vllt dazu sagen das es meine erste DB ist und ich mich durch diese Aufgabe in DBs einarbeiten soll. Ich weiß zwar wie ich es machen muss aber keine Ahnung wie ich des mit SQL umsetzen kann... :(

MfG

Saban

Geschrieben

Nimm Dir ein Buch für SQL, wo der Sprachsyntax erläutert ist. Dir hier alle Details und evtl auch eine fertige Lösung zu liefern, ist sicherlich nicht so ganz gewünscht. Außerdem fehlen in Deinem Post die Informationen zu den Beziehungen der Tabellen.

Generell benötigst Du aus dem SQL Syntax:

  • Select, um die Datensätze zu holen
  • Join um die Tabellen zu verknüpfen
  • Where mit between um die Datensätze "von / bis" zu suchen
  • evtl Subselects
  • sum um über Datenfelder zu summieren

Ich interpretiere Deinen letzten Satz als eine "Art Hausaufgabe" und somit solltest Du Dich selbst einarbeiten. Mein Tip: Beginne mit einer Tabelle, die Dir die Stunden über ein Projekt summiert, formuliere den Select in der Form, dass er nur ein Datenfeld mit der Gesamtstundenzahl liefert

HTH Phil

Geschrieben

Hey flashpix!

also ich habe mich schon in Befehle wie SELECT, BETWEEN, SUM oder ähnliches eingearbeitet. Das Problem ist nur das ich jetzt ne Addition über 2 Tabellen durchführen muss das Ergebnis dann mit Summe der Std multiplizieren muss und ich keine Ahnung habe wie das per SQL Statement gehen soll. Ich habe es eigentlich so gelöst gehabt:

try {

	result = stmt.executeQuery(							

			" SELECT * FROM Kosten, Mitarbeiter, laufProjekte, Projekte"+

			" WHERE Projekte.Projekt = '" + projekt + "'" +

			" AND Projekte.ProjektID = laufProjekte.ProjektID" + 

			" AND laufProjekte.Datum >= Kosten.Von" +

			" AND laufProjekte.Datum <= Kosten.Bis" + 

			" AND laufProjekte.PersonalNr = Mitarbeiter.PersonalNr" + 

			" AND Mitarbeiter.Lohngruppe = Kosten.Lohngruppe");


	while(result.next()){						

		stunden = result.getInt("Stunden");

		satz = result.getInt("StdSatz");


		summe = summe + satz * stunden;

	}


	area.append("Die Kosten für dieses Projekt betragen " + summe + "€");

	area.append("\n");


	System.out.println("Ausgabe der Kosten für das Projekt '" + projekt + "'");

} catch (SQLException e) {

	System.err.println("Fehler beim auslesen der Kosten von '" + projekt + "'!");

}

Aber das passte meinem Ausbilder nicht, da er meinte ich soll keine Java Variablen benutzen. Kann mir sonst noch jemand irgendwie helfen :(

Edit: \\ Ich sollte dazu das das noch die alte Tabellen Struktur war jetzt hab ich bei laufProjekten nur noch ein 'Datum' statt 'Von' und 'Bis'

MfG

Saban

Geschrieben
Aber das passte meinem Ausbilder nicht, da er meinte ich soll keine Java Variablen benutzen

Da hat er schon recht. Programmiere nichts nach, was Du auch in SQL machen kannst.

Zu allererst solltest Du auch auf das SELECT * verzichten. Nimm nur die Spalten die Du auch wirklich brauchst. Ansonsten wird das nichts.

Und jetzt einfach deine Formel in SQL schreiben:

SELECT SUM(satz * stunden) AS KOSTEN

Ergiebt dann genau eine Spalte namens KOSTEN die dir dein Ergebnis liefert.

Dim

Geschrieben (bearbeitet)
Und jetzt einfach deine Formel in SQL schreiben:

SELECT SUM(satz * stunden) AS KOSTEN

Ergiebt dann genau eine Spalte namens KOSTEN die dir dein Ergebnis liefert.

Wenn er von Kosten und laufProjekte selektiert, muss er noch die Spalte an der Tabelle spezifizieren, da beide eine Spalte "std" haben.

[Editerle]

Ahh, verlesen, bei dem anderen heißts Stunden. :floet:

Bearbeitet von TDM
Geschrieben
Wenn er von Kosten und laufProjekte selektiert, muss er noch die Spalte an der Tabelle spezifizieren, da beide eine Spalte "std" haben.

Na die genaue Umsetzung überlass ich mal dem Kollegen. :cool:

Würds sowieso erst direkt in Access probieren bevor ich das ganze dann hartcodiert (!!) in eine Javanawendung packe.

Dim

Geschrieben

Hi!

Des hatte ich auch schon. Da ist jetzt des Problem das ich die 'Standart' Kosten erhalte, das heißt es werden die Lohnerhoehungen nicht berücktsichtigt. Ich muss erst mal schauen ob der Angestellte Lohnerhoehungen erhalten hat anschließenden das Datum des Projekts mit der der Lohnerhoehung vergleichen und wenns vor dem Projekt war zu dem StdSatz des Angestellten dazu zählen und erst dann multiplizieren das ist mein eigentliches Problem. Tut mir leid falls euch der vorherige Post irritiert hat ich wollte nur zeigen das ich schon was gemacht hab...

MfG

Saban

Geschrieben

In diesem Fall sind das ja mehrere getrennte Berechnungen.

Schreib für jeden Fall ein eigenes SQL und füg die Ergebnisse per UNION ALL zusammen:

SELECT sum(ergebnis) as gesamtergebnis FROM(

select sum.... AS ERGEBNIS FROM...

UNION ALL

select sum ... AS ERGEBNIS FROM ...

)

Dim

Geschrieben
Würds sowieso erst direkt in Access probieren bevor ich das ganze dann hartcodiert (!!) in eine Javanawendung packe.

So gern ich auch selber seitenweise SQL-Anweisungen in meinem Quellcode hab, wieso hardcodieren und nicht als Access-Query?

(Wenns zynisch gemeint war, dann ok :D)

Geschrieben
(Wenns zynisch gemeint war, dann ok

Das war's durchaus :beagolisc

SQLs gehören eigentlich in eine eigene Datenbanktabelle und das SQL um sie zu laden in eine properties Datei o.ä.

Aber bei einer solchen Übungsaufgabe sollte es erstmal egal sein.

wieso hardcodieren und nicht als Access-Query?

Musste zum Glück schon lang nichts mehr mit Access machen, aber wie kann man die dann per JDBC abrufen?

Dim

Geschrieben
Musste zum Glück schon lang nichts mehr mit Access machen, aber wie kann man die dann per JDBC abrufen?

Da muss ich zum Glück (oder Pech) sagen, dass ich lange nicht mehr mit Java/JDBC zu tun hatte. Bei C#/ODBC behandelt man das aber als storedprocedur.

Ich meine mich zu entsinnen, dass es mit Java ähnlich geht, wobei Access irgendwo der Plattformunabhängigkeit von Java widerspricht.

Geschrieben
Ich meine mich zu entsinnen, dass es mit Java ähnlich geht,

Das wär dann wohl über ein CallableStatement.

wobei Access irgendwo der Plattformunabhängigkeit von Java widerspricht.

Wieso? Win2000, WinXP, Win2003, Win2008, Vista bald Win7. Reicht das nicht? :D

Dim

Geschrieben
Das wär dann wohl über ein CallableStatement.

Ja, aber wenn mit Parametern, dann sicher PreparedStatement.

Wieso? Win2000, WinXP, Win2003, Win2008, Vista bald Win7. Reicht das nicht? :D

Linux, Unix?

Ich wäre hier mehr für SQL-lite.

Geschrieben
Ja, aber wenn mit Parametern, dann sicher PreparedStatement.

Nö. Wenn es wie eine StoredProcedure behandelt wird, dann nicht. Entweder das eine oder das andere. Beide erlauben die übergabe von Parametern, aber der Rückgabewert wird anders behandelt. Bei einem CallableStatements per OUT Parameter, bei einem preparedStatement ist es ein ResultSet.

Wobei auch ein CallableStatement ein ResultSet liefern kann.

Linux, Unix?

Auch das war zynisch gemeint. :upps

Ich wäre hier mehr für SQL-lite.

Ich wär für eine Oracle XE Installation, dann lernt er wenigstens mal was eine richtige DB ist.

Dim

Geschrieben

Morgen!

Des mit den einzelnen Ergebnissen bringt mich zwar schon meinem Ziel näher aber da ist nix mit IF-Abfragen drin. Wie baue ich ne IF-Abfrage in das SELECT mit ein? Muss ja noch das Datum vergleichen bevor ich die Lohnerhoehung mit dem StdSatz addiere...

MfG

Saban

Geschrieben
Morgen!

Des mit den einzelnen Ergebnissen bringt mich zwar schon meinem Ziel näher aber da ist nix mit IF-Abfragen drin. Wie baue ich ne IF-Abfrage in das SELECT mit ein? Muss ja noch das Datum vergleichen bevor ich die Lohnerhoehung mit dem StdSatz addiere...

MfG

Saban

WHERE.

Wobei if-Abfragen nicht wie in Java behandelt werden, SQL ist keine Programmier- sondern eine Abfragesprache.

Nö. Wenn es wie eine StoredProcedure behandelt wird, dann nicht. Entweder das eine oder das andere. Beide erlauben die übergabe von Parametern, aber der Rückgabewert wird anders behandelt. Bei einem CallableStatements per OUT Parameter, bei einem preparedStatement ist es ein ResultSet.

Wobei auch ein CallableStatement ein ResultSet liefern kann.

Ok, wie gesagt; lang nichts mehr mit Java gemacht.

Geschrieben
WHERE.

Wobei if-Abfragen nicht wie in Java behandelt werden, SQL ist keine Programmier- sondern eine Abfragesprache.

Es gibt aber auch Bedingungen die man in die SELECT Klausel selbst einbauen kann. In Oracle verwendet man dazu entweder CASE oder DECODE. Ich weiß nicht wie das Schlüsselwort bei Access lautet.

Dim

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...