Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Tabellen verknüpfen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von matte, 9 Februar 2017.

  1. matte

    matte Neuer Benutzer

    Hi liebe Forumsgemeinde,

    habe folgendes Problem (hoffe ich kann es erklären):
    Habe eine Tabelle in denen ich Kernzeiten Speichere - hier hat jeder Mitarbeiter genau 7 Datensätze (Wochentage) gespeichert:

    upload_2017-2-9_19-25-43.png

    Dann habe ich eine zweite Tabelle in der die Täglichen Arbeitszeiten gespeichert werden:

    upload_2017-2-9_19-26-8.png

    Habe jetzt folgenden SQL:
    SELECT za_Kernzeiten.TagNr, za_Tagewerk.NmBis, za_Tagewerk.NmVon, za_Tagewerk.Datum, za_Tagewerk.VmVon, za_Tagewerk.VmBis,
    DATEPART(dw,Datum) as TagNr2, za_Kernzeiten.TagNr
    FROM za_Kernzeiten INNER JOIN
    za_Tagewerk ON za_Kernzeiten.TagNr = DATEPART(dw,za_Tagewerk.Datum)

    würde gerne die SollStuden (Kernzeitentabelle) abziehen von den Täglich geleisteten Stunden (Tagewerketabelle) um an die Überstunden zu kommen.
    Habt ihr eine Idee?
     

    Anhänge:

  2. ukulele

    ukulele Datenbank-Guru

    Wenn das Format TIME ist:
    Code:
    SELECT   za_Tagewerk.Datum,
         za_Kernzeiten.TagNr,
         za_Tagewerk.VmVon,
         za_Tagewerk.VmBis,
         za_Tagewerk.NmBis,
         za_Tagewerk.NmVon,
         datediff(minute,za_Tagewerk.VmVon,za_Tagewerk.VmBis) +
         datediff(minute,za_Tagewerk.NmVon,za_Tagewerk.NmBis) -
         datediff(minute,za_Kernzeiten.VmVon,za_Kernzeiten.VmBis) -
         datediff(minute,za_Kernzeiten.NmVon,za_Kernzeiten.NmBis) AS Ueberstunden,
         sum(
         datediff(minute,za_Tagewerk.VmVon,za_Tagewerk.VmBis) +
         datediff(minute,za_Tagewerk.NmVon,za_Tagewerk.NmBis) -
         datediff(minute,za_Kernzeiten.VmVon,za_Kernzeiten.VmBis) -
         datediff(minute,za_Kernzeiten.NmVon,za_Kernzeiten.NmBis)) OVER (ORDER BY za_Tagewerk.Datum) AS Uerberstunden_Saldo
    FROM   za_Tagewerk
    INNER JOIN za_Kernzeiten
    ON     datepart(dw,za_Tagewerk.Datum) = za_Kernzeiten.TagNr
     
  3. ukulele

    ukulele Datenbank-Guru

    Oder, wenn du vielleicht Mehrfachberechnungen reduzieren willst:
    Code:
    SELECT   t2.Datum,
         t2.TagNr,
         t2.VmVon,
         t2.VmBis,
         t2.NmBis,
         t2.NmVon,
         t2.Ueberstunden,
         sum(t2.Ueberstunden) OVER (ORDER BY t2.Datum) AS Uerberstunden_Saldo
    FROM   (
    
    SELECT   za_Tagewerk.Datum,
         za_Kernzeiten.TagNr,
         za_Tagewerk.VmVon,
         za_Tagewerk.VmBis,
         za_Tagewerk.NmBis,
         za_Tagewerk.NmVon,
         datediff(minute,za_Tagewerk.VmVon,za_Tagewerk.VmBis) +
         datediff(minute,za_Tagewerk.NmVon,za_Tagewerk.NmBis) - t1.Soll AS Ueberstunden
    FROM   za_Tagewerk
    INNER JOIN (
    
    SELECT   za_Kernzeiten.TagNr,
         datediff(minute,za_Kernzeiten.VmVon,za_Kernzeiten.VmBis) + datediff(minute,za_Kernzeiten.NmVon,za_Kernzeiten.NmBis) AS Soll
    FROM   za_Kernzeiten
    
         ) t1
    ON     datepart(dw,za_Tagewerk.Datum) = t1.TagNr
    
         ) t2
    ORDER BY t2.Datum
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden