Vorgesetzter auf spezieller Stufe

hanmes

Neuer Benutzer
Beiträge
2
Hallo liebe Community

Ich sitze seit Tagen an einer Problematik und bin auch via Google auf keine Lösung gekommen.

Und zwar habe ich eine Tabelle "Mitarbeiter" sowie eine Tabelle "Karriere".

In der Tabelle "Karriere" wird jeweils abgebildet, wer der direkte Vorgesetzte ist und welche Stufe ein Vorgesetzter hat.

Ich würde nun gerne von allen Mitarbeitern den Vorgesetzten (eventuell halt eben den Vorgesetzten vom Vorgesetzten) haben, welcher auf der Stufe 40 ist.

Für eure Hilfe / Unterstützung bin ich euch sehr dankbar.

Grüsse aus der Schweiz
 
Werbung:
Vielleicht verrätst Du uns auch noch, welche Datenbank überhaupt eingesetzt ist und wie die Tabellenstruktur genau aussieht. Oder sollen wir raten?
 
Und wie das Ergebnis aussehen soll, also welche Informationen drin stecken müssen. Geht es nur um alle die
a) Vorgesetzter sind und > Stufe 40 oder
b) Alle Mitarbeiter, dahinter den Vorgesetzen, ggf. dahinter weitere Vorgesetzte (also eine Art Baum) oder
c) Alle Mitarbeiter mit dem jeweiligen direkten Vorgesetzen und falls dieser weitere Vorgesetzte hat diesen auch nochmal als Mitarbeiter mit seinem Vorgesetzten usw. usf.
 
Hallo zusammen

Erstmal vielen Dank für die bisherigen Rückmeldungen.

Welche Datenbank bei unserem internen System eingesetzt ist, kann ich euch leider sagen, da ich das nicht weis.

Zum Aufbau
Tabelle "Mitarbeiter"
Mitarbeiter-Nr
Name
Vorname
Einstellungsdatum
und viele weitere Angaben zum Mitarbeiter

Tabelle "Karriere"
Mitarbeiter-Nr
Karriere-Stufe
Vorgesetzter (in Form der Mitarbeiter-Nr des Vorgesetzten)
Karriere_gültig_ab
Karriere_gültig_bis

Auswertung
Ich möchte alle Mitarbeiter aufgelistet haben und den Vorgesetzten dazu, welcher die Stufe 40 hat

Mitarbeiter | Vorgesetzter Stufe 40

Beispiel
Tabelle "Mitarbeiter"
001 | Müller | Klaus | 01.01.2020
002 | Muster | Klara | 01.01.2020
003 | Holderich | Moritz | 01.01.2020
004 | Huber | Fritz | 01.01.2020
005 | Suter | Anna | 01.01.2020
006 | Werlinger | Adalbert | 01.01.2020

Tabelle "Karriere
006 | 20 | 004 | 01.01.2020 | -
005 | 20 | 004 | 01.01.2020 | -
004 | 30 | 002 | 01.01.2020 | -
003 | 30 | 002 | 01.01.2020 | -
002 | 40 | 001 | 01.01.2020 | -
001 | 50 | - | 01.01.2020 | -

Auswertung
Mitarbeiter | Vorgesetzter Stufe 40

Muster | Muster
Holderich | Muster
Huber | Muster
Suter | Muster
Werlinger | Muster

Ich hoffe, dass dies so einigermassen verständlich aufgeführt ist. Bei Rückfragen melde ich mich umgehend.

@akretschmer vielen Dank für die Tipps, lese mich dort ein!
 
Werbung:
Code:
WITH t AS (
    SELECT    m.[Mitarbeiter-Nr],
            m.[Name],
            k.Vorgesetzter,
            k.[Karriere-Stufe]
    FROM    Mitarbeiter m
    LEFT JOIN Karriere k
    ON        m.[Mitarbeiter-Nr] = k.[Mitarbeiter-Nr]
    WHERE    Karriere_gültig_ab IS NULL
    AND        Karriere_gültig_bis IS NULL
    OR        Karriere_gültig_ab <= getdate()
    AND        Karriere_gültig_bis IS NULL
    OR        getdate() BETWEEN Karriere_gültig_ab AND Karriere_gültig_bis
    ), cte AS (
    SELECT    t.[Mitarbeiter-Nr],
            t.[Name],
            t.Vorgesetzter,
            t.[Karriere-Stufe]
    FROM    t
    UNION ALL
    SELECT    cte.[Mitarbeiter-Nr],
            cte.[Name],
            t.Vorgesetzter,
            t.[Karriere-Stufe]
    FROM    cte
    INNER JOIN t
    ON        cte.Vorgesetzter = t.[Mitarbeiter-Nr]
    WHERE    cte.Vorgesetzter IS NOT NULL
    AND        cte.[Karriere-Stufe] < 40
    )
SELECT    cte.[Name],
        m.[Name]
FROM    cte
LEFT JOIN Mitarbeiter m
ON        cte.Vorgesetzter = m.[Mitarbeiter-Nr]
WHERE    cte.[Karriere-Stufe] > 40
Der Code hat ggf. noch Schwächen:
- Es könnte Karriere_gültig_ab nicht gesetzt sein aber Karriere_gültig_bis, das fange ich noch nicht ab. Überhaupt bin ich nicht sicher wie sich diese Zeiträume darstellen.
- In deinem DB-Modell könnte es mehrere Vorgesetzte pro Mitarbeiter geben, dann wird es zumindest verwirrend.
- Es könnte Schleifen geben.
- Es könnte sein das es in der Kette keinen Vorgesetzten > Stufe 40 gibt.
- Ich hab das jetzt nicht getestet.

Das ist MSSQL. Solange du nicht raus findest welche Datenbank du hast kann ich dir nicht weiter helfen als dir eine MSSQL Vorlage zu geben. Eventuell kann deine Datenbank das auch gar nicht.
 
Zurück
Oben