| |
ADO.NET / DatenbankenSQL-Syntax für Wochenplaner | | | Autor: effeff | Datum: 06.03.15 14:49 |
| Hallo,
ich habe eine SQL-Express-Datenbank mit drei Tabellen.
Tabelle 1, "Personal": ID, Nachname, Vorname, Personalnummer
Beispiel:
1, Müller, Heinz, 165436
2, Schmidt, Gustav, 154234
3, Bibo, Bärbel, 156783
Tabelle 2, "Abwesenheitsgrund": ID, Abwesenheitsgrund
Beispiel:
1, Urlaub
2, krank
3, Wochenende
4, Fortbildung
Tabelle 3, "Planung": ID, Datum, ID_Personal, ID_Abwesenheitsgrund
Beispiel:
1, 2015-03-06 00:00:00.000, 2, 1
2, 2015-03-06 00:00:00.000, 2, 1
3, 2015-03-06 00:00:00.000, 2, 2
4, 2015-03-06 00:00:00.000, 2, 2
5, 2015-03-06 00:00:00.000, 2, 1
6, 2015-03-06 00:00:00.000, 2, 3
7, 2015-03-06 00:00:00.000, 2, 3
So... und nun steht mir unheimlich einer auf dem Schlauch, um daraus folgende DataTable zu machen:
Nachname, Vorname, Personalnummer, Abwesenheitsgrund am 06.03.2015, Abwesenheitsgrund am 07.03.2015, Abwesenheitsgrund am 08.03.2015, Abwesenheitsgrund am 09.03.2015, Abwesenheitsgrund am 10.03.2015, Abwesenheitsgrund am 11.03.2015, Abwesenheitsgrund am 12.03.2015
Oder übersetzt:
Müller, Heinz, 165436, Urlaub, Urlaub, krank, krank, Urlaub, Wochenende, Wochenende
Hat jemand eine Idee, wie ich das am geschicktesten realisieren kann?
EALA FREYA FRESENA | |
Re: SQL-Syntax für Wochenplaner | | | Autor: Manfred X | Datum: 06.03.15 15:05 |
| Hallo!
Willst Du eine (beliebige) Liste von Datumswerten (für Abwesenheitsgrund) abfragen?
Warum willst Du alle Angaben in einer Tabelle zusammenfassen?
Wäre es nicht einfacher, eine Liste (Tabelle) der betroffenen Personen zu erstellen
und in einer zweiten Liste die Abwesenheitstage und -Gründe (1:N-Verknüpfung über
PersonalID, Datarelation)?
Übrigens: Was ist mit Feiertagen? Streiktagen?
Oder wenn jemand "unentschuldigt" fehlt? (Rest-Kategorie: andere Gründe)
Beitrag wurde zuletzt am 06.03.15 um 15:18:36 editiert. | |
Re: SQL-Syntax für Wochenplaner | | | Autor: Manfred X | Datum: 06.03.15 15:48 |
| Wenn Du die Abfrage wie vorgeschlagen aufgliederst und eine Datarelation zwischen die Tabellen setzt,
kannst Du über eine Linq-Abfrage blitzschnell Deine Tabelle daraus aufbauen.
Allerdings verstehe ich den Zweck Deiner Tabelle noch nicht so ganz.
Für eine Kapazitätsplanung benötigt man vermutlich die Arbeitsstunden, die pro Person angesetzt werden können.
Wie sieht es bei einer Halbtags-Abwesenheit (z.B. Arztbesuch) oder Angestellten mit einer Halbtags-Stelle aus?
Da das Wochenende als Abwesenheitsgrund gilt, wird offenbar mitunter auch am Wochenende gearbeitet.
Es wäre möglich, daß jemand an allen Wochentagen arbeitet -> es gibt keinen Abwesenheitsgrund.
Taucht so eine Person in der Liste deshalb nicht auf?
| |
Re: SQL-Syntax für Wochenplaner | | | Autor: effeff | Datum: 06.03.15 16:05 |
| Moin!
Der Zweck der Tabelle ist der, anzuzeigen, wer an welchem Tag anwesend oder aus irgendeinem Grund abwesend war bzw. sein wird, und zwar wochenweise; Eine Auflistung nach Stunden ist nicht eingebaut. In der jetzigen Tabelle ist per CellFormattingEvent hinterlegt, dass Abwesenheiten rot markiert werden, Anwesenheiten grün und spezielle Abwesenheiten in cyan. Damit ist eine grober Überblick über den Personalstand schnell möglich. Wir reden hier übrigens von knapp unter 20 Leuten. Der Vorteil dieser Darstellungsweise der Daten ist auch, dass sie 1:1 als Excel-Datei ausgegeben werden kann.
Die Gründe für Abwesenheit sind inklusive Halbtagsgeschichten eingetragen. Am Wochenende wird normalerweise nicht gearbeitet, was aber nicht heißt, dass es nicht einmal dazu kommen könnte bzw. dieses schon geschehen ist, was z. B. dann der Fall sein kann, wenn die Telefonanlage umgerüstet wird, ich neue Server einrichten muss, etc; Zudem gibt es Gründe dafür wegen anderer Terminarbeiten.
EALA FREYA FRESENA | |
Re: SQL-Syntax für Wochenplaner | | | Autor: Manfred X | Datum: 06.03.15 17:27 |
| Kleines Beispiel ...
Public Class frmRelation
Dim ds As New DataSet
Dim dtPersonal As New DataTable
Dim dtAbsent As New DataTable
Dim dtPlanung As New DataTable
Dim dgv As New DataGridView With {.Parent = Me}
Private Sub frmRelation_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'Testdaten erzeugen
'==================================
'Abgefragte Personalliste
With dtPersonal
.Columns.Add("PersonID", GetType(Integer))
For i As Integer = 0 To 19
.Rows.Add(i)
Next i
Dim pk() As DataColumn = {.Columns(0)}
.PrimaryKey = pk
.TableName = "Personal"
ds.Tables.Add(dtPersonal)
End With
Dim monday As Date = CDate("9.3.2015") 'Der Wochenstart
'Abgefragte Abwesenheitsliste
With dtAbsent
With .Columns
.Add("ID", GetType(Integer))
.Add("PersonalID", GetType(Integer))
.Add("Datum", GetType(Date))
.Add("AbsentID", GetType(Integer))
End With
.PrimaryKey = {.Columns(0)}
Dim rndm As New Random, z As Integer
For i As Integer = 0 To dtPersonal.Rows.Count - 1
z += 1
.Rows.Add(z, i, monday.AddDays(rndm.Next(0, 7)).Date, _
rndm.Next(0, 5))
z += 1
.Rows.Add(z, i, monday.AddDays(rndm.Next(0, 7)).Date, _
rndm.Next(0, 5))
Next i
.TableName = "Absent"
ds.Tables.Add(dtAbsent)
End With
'Relation erstellen
'=====================================================================
ds.Relations.Add(New DataRelation _
("PersonalAbsent", dtPersonal.Columns("PersonID"), _
dtAbsent.Columns("PersonalID")))
'Planungsliste per DataRelation aufbauen (Spaltenumsetzung)
'====================================================================
With dtPlanung
With .Columns
.Add("PersonalID", GetType(Integer))
'Datums-Spalten erstellen
For i As Integer = 0 To 6
.Add(Format(monday.AddDays(i), "Short Date"), _
GetType(Integer))
Next i
End With
'Personal-Zeilen
For i As Integer = 0 To dtPersonal.Rows.Count - 1
dtPlanung.Rows.Add(i)
Next i
With dtPersonal
For i As Integer = 0 To .Rows.Count - 1
'Childrows für Person abfragen
Dim cr() As DataRow = _
.Rows(i).GetChildRows("PersonalAbsent")
If Not cr Is Nothing Then
For k As Integer = 0 To cr.Length - 1
'Datumspalte ermitteln
Dim coldatum As String = _
CType(cr(k)("Datum"), String)
'Zeile für Person finden (optional, Index = i)
Dim r() As DataRow = _
dtPlanung.Select _
("PersonalID=" & CType(cr(k)("PersonalID"), String))
'Abwesenheitsgrund in die Datumspalte eintragen
r(0)(coldatum) = cr(k)("AbsentID")
Next k
End If
Next i
End With
End With
dgv.DataSource = dtPlanung
End Sub
End Class
Beitrag wurde zuletzt am 06.03.15 um 17:37:35 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|