Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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

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

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

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)

(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

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.

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

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.

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

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

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.