Jump to content

Isii

Members
  • Gesamte Inhalte

    3
  • Registriert seit

  • Letzter Besuch

Fortschritt von Isii

Rookie

Rookie (2/14)

  • Erste Antwort
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei
  • 1 Jahre dabei

Neueste Abzeichen

0

Reputation in der Community

  1. Hallo zusammen, ich habe gerade einen Knoten im Kopf und finde nicht den richtigen Ansatz. Ich habe 2 Tabellen in SQL Server 2008 R2, Tabelle A (Operative Daten) speichert Daten aus Tabelle B (Stammdaten) ab. In Tabelle B ist die Route eines Produktes mit Ort und Zeit hinterlegt. Tabelle A speichert ab und an falsche Daten ab, diese falschen Daten sollen zurückgegeben werden. Tabelle A TabelleA.Id, ProduktID, StartZeit, Ort1, Endzeit, Ort2 1, 40111, 10:00, A, 14:00, A 2, 40201, 19:00, A, 20:00, C 3, 40201, 19:00, A, 20:30, C Tabelle B ProduktID, Ort, Zeit 40111, A, 10:00 40111, B, 11:00 40111, C, 12:00 40111, A, 14:00 40201, A, 19:00 40201, B, 19:30 40201, C, 20:00 40301, A, 20:30 40301, A, 23:30 Geprüft werden soll, ob zu einer ProduktID in der Tabelle A die Orte und die Uhrzeiten in der Tabelle B vorhanden sind, einmal für StartOrt+Uhrzeit, danach für EndOrt+Uhrzeit. Ergebnis des Vergleichs im Beispiel soll die Id 3 der Tabelle A zurückgeben, diese Uhrzeit kommt in Tabelle B bei dem Produkt nicht vor. Da in beiden Tabellen die ProduktID mehrfach vorkommen, komme ich mit einem Vergleich wie NOT IN nicht so recht weiter, da ja die falsche 20:30 bei einem anderen Produkt zu finden ist. Irgendwelche Ratschläge? Vielen Dank und viele Grüße Isii
  2. Vielen Dank! :) Habe ich so übernommen und es kommt genau das raus, was rauskommen soll. Das Uhrzeitfeld ist Char(5), die Umwandlung in DATETIME ist sicher sauberer. Ich habe aber bei SUM (DATEDIFF ...) in Zeile 4 statt Hour trotzdem Minuten genommen und durch 60.0 geteilt, weil nicht nur volle Stunden, sondern auch Minuten bei der Dauer in der Dispo-Tabelle stehen und das Ergebniss als Dezimalzahl benötigt wird.
  3. Hallo zusammen, ich habe eine Abfrage über eine Tabelle, die mir summierte Einsatzzeiten gruppiert nach Jahr, Ort, Produkt zurückgeben soll. Die Daten in der Tabelle Dispo liegen in folgender Form vor Datum, Ort, Produkt, Anfang, Ende 03.01.2015,Berlin, 401, 10:00, 11:00 ->(1 Std) 04.01.2015,Berlin, 401, 15:00, 16:00 -> (1 Std) 01.01.2015,Rom, 401, 10:00, 15:00 -> (5 Std) 02.01.2015,Rom, 402, 10:00, 11:00 -> (1 Std) 02.01.2015,Rom, 402, 20:00, 01:00 -> (5 Std) Rauskommen soll: Jahr, Ort, Produkt, EStd 2015, Berlin, 401, 2.00 2015, Rom, 401, 5.00 2015, Rom, 402, 6.00 Der erste Ansatz war: SELECT Year(Datum) AS JAHR, Ort, Produkt, Sum (DATEDIFF(n, Anfang, Ende))/60.00 AS EStd FROM Dispo group by Year(Datum), Ort, Produkt Sah gut aus, aber da ein paar der Endzeiten über Mitternacht hinausgingen und somit die Berechnung von Datediff in irgendwelchen utopischen Minus Bereichen lag, habe ich dafür dann eine Fallunterscheidung mit CASE gemacht. SELECT Year(Datum) AS JAHR, Ort, Produkt, CASE WHEN Anfang>Ende THEN Sum (1440-(DATEDIFF(n, Ende,Anfang)))/60.00 ELSE Sum (DATEDIFF(n, Anfang, Ende))/60.00 END AS EStd FROM Dispo group by Year(Datum), Ort, Produkt Jetzt bekomme ich aber diese Fehlermeldung: Die Anfang-Spalte ist in der Auswahlliste ungltig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist. (Spalte 3) (Ende-Spalte analog) Ich will aber Anfang und Ende weder ausgeben noch darüber gruppieren, weil ich damit mehrere Summen pro Produkt bekomme. Irgendwelche Ratschläge? Vielen Dank und beste Grüße, Isii
×
×
  • Neu erstellen...