Fragensteller
Umwandeln von Zeitspannen für Kapazitätsplanung/Material

Frage
-
Hallo zusammen!
Ich versuche eben die Welt von MS Access 2007 zu verlassen und mit auf MS SQL 2012 umzustellen.
Soweit komme ich mit SQL ja zurecht - derzeit hänge ich aber bei einem Problem - wie ich Zeitspannen (von-bis - in Tagen) in einzelne Tage umwandeln kann.
Hintergrund - ich möchte Kapazitätsplanungen damit hochrechnen - was ich an Material verbrauchen werde etc.
Also mein Table schaut wie folgt aus:
Task - StartDatum - EndDatum - Material - Einheiten
Arbeit1 - 2013-01-20 - 2013-01-29 - Steine - 30
Arbeit2 - 2013-01-25 - 2013-01-31 - Steine - 28
Daraus folgt -
Arbeit1 - 3 Steine /pro Tag
Arbeit2 - 4 Steine /pro Tag
Am 2013-01-27 - brauche ich somit 7 Steine
Mein Ansatz war ein Grid View zu bekommen - hierzu müsste ich aber die Daten aus der Tabelle - in einzelne Tagesdaten umwandeln.
Sprich:
Arbeit1 - 2013-01-20 - Steine 3
Arbeit1 - 2013-01-21 - Steine 3
etc.
Vielleicht denke ich zu kompliziert... eine Idee wie ich das umsetzten kann?
Zeitspannen konvertieren .. und in eine Tabelle schreiben - so würde ich es mit VB in Access machen...
Da gibts ne bessere Lösung, oder?
Danke
Björn
Learning by doing...
Alle Antworten
-
Die Differenz in Tagen kannst du in T-SQL mittels DATEDIFF() berechenen und genause deinen Durchschnitt.
-
Danke für die Hilfe. Also mit Datediff() bekomme ich meine Zeit - und somit die Einheiten pro Tag. Das hab ich inzwischen in einer Abfrage drinnen.
Nur - soll ich nun für jeden Record - und einem Tag mit Einheit x - eine neue Tabelle schreiben - und dann darüber das Grid laufen lassen. Oder gibts da eine elegante Lösung wie ich an meine TagesWerte im Total kommen kann?
Ich hab da etwa 5.000-10.000 Datensätze die sich alle paar Tage ändern - Zeitspannen von bis zu 2 Jahren (pro record). Wenn ich da eine Tabelle mit Daten fülle... kommen schnell mal paar Millionen Datensätze zusammen.
Denke das kostet irre viel Zeit das so umzuwandeln. Oder etwa nicht?
Oder soll da lieber eine Abfrage in jeden Datensatz schauen - ob das in das gewünschte Zeitfenster fällt - und dann den Bedarf von Material X am Tag Y rausrechnet?
Ich würde am liebsten so etwas wie ein GridView bekommen - weiß aber nicht wo ich da wirklich ansetzten soll...
Learning by doing...
-
Eine Tabelle pro Tag ist im Normalfall kein gute Lösung. Auch sind deine Datenmengen im Normalfall kein Problem. Sollte die Berechnung der Tag ein Problem sein, so kannst du auf persistente berechete Spalten zurückgreifen. Allerdings als quasi letztes Mittel:
USE tempdb; CREATE TABLE Tasks ( TaskName NVARCHAR(255) NOT NULL , StartDatum DATE NOT NULL , EndDatum DATE NOT NULL , Material NVARCHAR(255) NOT NULL , Einheiten INT NOT NULL , TaskDauer AS DATEDIFF(DAY, StartDatum, EndDatum) PERSISTED NOT NULL ); INSERT INTO Tasks VALUES ( 'Arbeit1' , '20130201', '20130203', 'Steine', 30 ); SELECT * FROM Tasks;