Diese Website verwendet Cookies sowie Analyse-Software zur Erfassung und Auswertung der Webseiten-Nutzung. Details zur Art und Umfang der Datenerhebung finden Sie in unserer Datenschutzerklärung. Wenn Sie diese Website weiterhin nutzen, stimmen Sie der Verwendung von Cookies zu.

Druckansicht der Seite www.rowisoft.de/handbuch-das_finale_alles_zusammen
Dokumentation zum Warenwirtschaftssystem Rowisoft blue

Das Finale: Alles zusammen

Nachdem wir nun also wissen, was Funktionen und Aggregatsfunktionen sind, wie Tabellen miteinander verknüpft werden und wie man Bedingungen benutzt, um nur bestimmte Datensätze anzuzeigen, möchten wir am Ende dieses Kapitels zum Thema „Daten auslesen mittels SQL“ eine Auswertung erzeugen, die all diese Möglichkeiten zusammen nutzt.

Wir möchten eine Umsatzliste, die uns aufzeigt, welchen Gesamtumsatz die jeweiligen Mitarbeiter im Jahr 2010 erwirtschaftet haben.

Dazu benötigen wir also mindestens 2 Tabellen: Vorgänge (daraus können wir die Umsätze errechnen) und Mitarbeiter (in der wir erfahren, welche Mitarbeiter es gibt und wie deren Namen sind). Die Abfrage enthält also auf jeden Fall das Schlüsselwort JOIN um die beiden Tabellen miteinander zu verknüpfen.

Da wir nur den Umsatz aus dem Jahre 2010 ermitteln möchten, brauchen wir auch mindestens einmal die Funktion EXTRACT. Die Funktion EXTRACT gibt uns die Jahreszahl aus dem Rechnungsdatum zurück.

Diese Jahreszahl müssen wir dann daraufhin prüfen, ob es sich um die Jahreszahl 2010 handelt. Somit benötigen wir für unsere Abfrage also das Schlüsselwort WHERE, mit der wir eine Bedingung hinzufügen.

Außerdem brauchen wir die Aggregatsfunktion SUM, um die Summe aus der Spalte „Zwischensumme“ bilden zu können.

Schritt 1: Die Namen der Mitarbeiter

Beginnen wir zunächst mit den unkomplizierten Dingen: Wir möchten die Namen der Mitarbeiter erfahren, deren Umsätze wir auswerten. Die Felder, die wir 1 zu 1 so ausgegeben haben möchten, wie diese in der Datenbank gespeichert sind, schreiben wir einfach nach dem Schlüsselwort „SELECT“:

SELECT Name, Vorname FROM Mitarbeiter

Doch Vorsicht: Wir haben uns gerade überlegt, dass wir die beiden Tabellen „Mitarbeiter“ und „Vorgaenge“ miteinander verknüpfen möchten. Immer wenn wir das Schlüsselwort „JOIN“ (mit dem Tabellen verknüpft werden) verwenden, sollten wir zu den Feldnamen den Tabellennamen mit einem Punkt getrennt aufführen. Wir erweitern die Abfrage also geringfügig:

SELECT Mitarbeiter.Name, Mitarbeiter.Vorname FROM Mitarbeiter

Schritt 2: Die Verknüpfung

Wir möchten die Tabelle Mitarbeiter mit der Tabelle Vorgaenge verknüpfen. Dafür benötigen wir das Schlüsselwort „JOIN“. Dem JOIN folgt der Name der verknüpften Tabelle, das ON-Schlüsselwort und die Verknüpfungsbedingung.

Verknüpft sind die beiden Tabellen über das Feld „Mitarbeiter“ der Vorgangstabelle und das Feld „Nummer“ der Mitarbeiter-Tabelle.

Wir erweitern so also unsere Abfrage um den JOIN-Teil:

SELECT Mitarbeiter.Name, Mitarbeiter.Vorname FROM Mitarbeiter JOIN Vorgaenge ON (Vorgaenge.Mitarbeiter = Mitarbeiter.Nummer)

Schritt 3: Nur verbuchte Rechnungen und Quittungen

Die Summen von Lieferscheinen oder Angeboten zählen nicht zum Umsatz. Zum Umsatz zählen nur die Zwischensummen der Rechnungen und der Quittungen. Da wir in Rowisoft blue auch Vorgänge anlegen können, die wir gar nicht verbuchen, sollten wir auch nur die verbuchten Vorgänge berücksichtigen. Ob ein Vorgang verbucht ist, erfahren wir über den Feldnamen „Berechnet“.

Wir fügen also folgende Bedingung hinzu:

SELECT Mitarbeiter.Name, Mitarbeiter.Vorname FROM Mitarbeiter JOIN Vorgaenge ON (Vorgaenge.Mitarbeiter = Mitarbeiter.Nummer) WHERE (Vorgaenge.Typ = ‘Rechnung‘ OR Vorgaenge.Typ = ‘Quittung‘) AND Vorgaenge.Berechnet = true

Schritt 4: Nur Vorgänge aus dem Jahr 2010

Zusätzlich zu unserer WHERE-Bedingung müssen wir nun noch angeben, dass nur Vorgänge aus dem Jahr 2010 berücksichtigt werden sollen. Dazu nutzen wir zunächst die Funktion „EXTRACT“, mit welcher wir die Jahreszahl aus dem Feld „Berechnungsdatum“ extrahieren. Den dann extrahierten Wert vergleichen wir mit dem Jahr 2010:

SELECT Mitarbeiter.Name, Mitarbeiter.Vorname FROM Mitarbeiter JOIN Vorgaenge ON (Vorgaenge.Mitarbeiter = Mitarbeiter.Nummer) WHERE (Vorgaenge.Typ = ‘Rechnung‘ OR Vorgaenge.Typ = ‘Quittung‘) AND Vorgaenge.Berechnet = true AND EXTRACT(YEAR, Vorgaenge.BerechnungsDatum) = 2010

Die Zahl 2010 schreiben wir übrigens nicht in Anführungszeichen, da es sich beim Extrahieren der Jahreszahl eindeutig um den Datentyp INTEGER handelt.

Schritt 5: Summe von Zwischensumme

Nachdem wir die beiden Tabellen nun verbunden haben, hinterlegen wir das Summen-Feld. Dazu erweitern wir die Abfrage um den Passus „SUM(Vorgaenge.Zwischensumme) AS Umsatz“, was also die Summe des Datenfeldes „Zwischensumme“ bildet und diesen unter dem Spaltennamen „Umsatz“ ausgibt:

SELECT Mitarbeiter.Name, Mitarbeiter.Vorname, SUM(Vorgaenge.Zwischensumme) as Umsatz FROM Mitarbeiter JOIN Vorgaenge ON (Vorgaenge.Mitarbeiter = Mitarbeiter.Nummer) WHERE (Vorgaenge.Typ = ‘Rechnung‘ OR Vorgaenge.Typ = ‘Quittung‘) AND Vorgaenge.Berechnet = true AND EXTRACT(YEAR, Vorgaenge.BerechnungsDatum) = 2010

Schritt 6: Gruppierung

Immer wenn Sie eine Aggregatsfunktion nutzen und die SQL-Abfrage zusätzlich noch weitere Spalten ausgibt (in unserem Beispiel sind das die Felder Name und Vorname aus der Mitarbeiter-Tabelle), benötigen Sie die GROUP BY – Klausel.

Beim Gruppieren fällt uns nun aber auf: Wonach soll denn eigentlich gruppiert werden? Welche Zwischensummen sollen zusammengerechnet werden und welche nicht?

Wir wollen die Zwischensummen für jeden Mitarbeiter zusammenrechnen. Wir benötigen an dieser Stelle also noch ein eindeutiges Feld, das den Mitarbeiter angibt. Dieses finden wir entweder unter Mitarbeiter.Nummer oder unter Vorgaenge.Mitarbeiter. Welches Feld wird verwenden, ist tatsächlich egal. Da unsere Abfrage allerdings primär auf die Mitarbeiter-Tabelle abzielt (in unserer SQL-Abfrage finden wir den Passus „FROM Mitarbeiter“), entschließen wir uns für eben dieses Feld aus der Mitarbeiter-Tabelle.

Gleichzeitig hinterlegen wir in der SQL-Abfrage die notwendige GROUP BY – Klausel:

SELECT Mitarbeiter.Nummer, Mitarbeiter.Name, Mitarbeiter.Vorname, SUM(Vorgaenge.Zwischensumme) as Umsatz FROM Mitarbeiter JOIN Vorgaenge ON (Vorgaenge.Mitarbeiter = Mitarbeiter.Nummer) WHERE (Vorgaenge.Typ = ‘Rechnung‘ OR Vorgaenge.Typ = ‘Quittung‘) AND Vorgaenge.Berechnet = true AND EXTRACT(YEAR, Vorgaenge.BerechnungsDatum) = 2010 GROUP BY Mitarbeiter.Nummer

Damit ist die SQL-Abfrage fertig und als Ergebnis erhalten wir eine Umsatzliste pro Mitarbeiter für das Jahr 2010.

Die URL dieser Seite ist: www.rowisoft.de/handbuch-das_finale_alles_zusammen.html
Gedruckt am Donnerstag, 23. November 2017.
© Copyright by Rowisoft GmbH.
Commercial use prohibited.


Notizen:

pinnery
pinnery.com
pinnery - für Ihre Projekte
Projekt-Software
Perfekt organisiert
Alles mit jedem organisieren! In pinnery erfassen Sie Ihre Aufgaben und teilen sie mit Freunden und Kollegen. Durch die in Spalten aufgeteilte, übersichtliche Darstellung behalten Sie Ihr Projekt immer im Blick.
pinnery ist kostenlos!
Jetzt registrieren!