mowch 10 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 Hallo,ich möchte aus einer Tabelle sie sum(Stück) ermitteln, seit dem Typenwechsel, die Tabelle sie wie folgt aus:ID Datum Type Anzahl 1 20140305 HK101 60 2 20140305 HK100 103 20140305 HK100 154 20140305 HK100 23 5 20140305 HK101 5 6 20140305 HK101 10 7 20140305 HK101 20 ich möchte nun sum(Anzahl) von der aktuellen TypeSelect für aktuelle Type: select Type from Zähler where ID = (select Max(ID) from Zähler) Ergebniss HK101 Soweit kein Problem, jedoch soll nun nur jene Einträge gezählt werden, seit dem letzten Typenwechsel, d.h. ab ID 5. die ID 1 darf nicht mitgezählt werden. Ergebnis sollte sein 35 Hat jemand ein Idee ob das überhaupt funktioniert?DANKEmowch Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 (bearbeitet) Hi, ich verstehe die Frage nicht, die ist etwas wirr. Wenn Du alle Summen für HK101 haben willst, schreibe: select sum(anzahl) as stueck where type = 'HK101' bearbeitet 5. März 2014 von zahni Zitieren Link zu diesem Kommentar
mowch 10 Geschrieben 5. März 2014 Autor Melden Teilen Geschrieben 5. März 2014 Hi, ich weiß ist etwas schwierig zu erklären, ich möchte aber nur die HK101 ab der ID 5 haben, ohne die ID 1. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 select sum(anzahl) as stueck where type = 'HK101' and ID <> 1; Zitieren Link zu diesem Kommentar
mowch 10 Geschrieben 5. März 2014 Autor Melden Teilen Geschrieben 5. März 2014 die ID 1 soll nur symbolisch sein, in dieser Tabelle hab 1000 Einträge, die where Bedingung soll dynamisch sein. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 Aber was soll dann die Bedingung sein ? Ist das dargestellte Datenmodell vollständig ? Beschreibe ganz kurz Prosa, ohne SQL, was Dein Ziel sein soll. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 Evtl. hilft dir OVER: http://msdn.microsoft.com/de-de/library/ms189461.aspx 1 Zitieren Link zu diesem Kommentar
mowch 10 Geschrieben 5. März 2014 Autor Melden Teilen Geschrieben 5. März 2014 (bearbeitet) mit der over klaus funktioniert leider auch nicht so wirklich.ich probiere es nochmals zu erklären: ich möchte aus einer Tabelle die aktuell produzierten Stück der aktuellen Type ermitteln.1. die Aktuelle Type erhalten ich durch den letzten Eintrag der Tabelle somit habe ich meine erste where Bedingung.2. nun möchte ich nur jene Zeilen retour haben seid dem letzten Typenwechsel, d.h. Typenwechsel war bei ID Nr 5.select sum(anzahl) from zähler where Type = (select Type from zähler where ID = max(ID)) and ID > 5 Wie erhalte ich dynamisch die 5? ich habs mal im Excel dargestellt bearbeitet 5. März 2014 von mowch Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 Ich glaube nicht dass es so geht wie Du möchtest. Du könntest natürlich die OVER Sache testen, lass dir nur die Zwischensumme und die ID ausgeben, jetzt nimmst Du deine Tabelle und hängst die View mit der Zwischensumme einfach dran. Verknüpft über die ID, schon wird die Zwischensumme nur einmal angezeigt. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 5. März 2014 Melden Teilen Geschrieben 5. März 2014 Ich glaube, er möchte die einzelnen Zeilen summieren, die über einen Zeitraum nacheinander produziert worden sind, Wo bei die genaue Zahl jeweils bis zum nächsten Typ-Wechsel benötigt wird. Da fällt mir auch nichts ein, außer eine passende Prozedur zu schreiben. Hier ist man dann nicht mehr an die SQL-Syntax gebunden. Alternative ist ein Neudesign der Datenbank. Z.b. jeder "Produktion" eine eindeutige ID geben. Dann lassen sich die Zeilen gruppieren. Zitieren Link zu diesem Kommentar
mowch 10 Geschrieben 6. März 2014 Autor Melden Teilen Geschrieben 6. März 2014 hallo,ich denke ich werde den weg über die das Neudesign gehen, da die Tabelle extrem viel Datenbeinhaltet. wird das auch mit der over-Klausel vom Timing her zu aufwendig. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 6. März 2014 Melden Teilen Geschrieben 6. März 2014 ich denke ich werde den weg über die das Neudesign gehen, da die Tabelle extrem viel Datenbeinhaltet. wird das auch mit der over-Klausel vom Timing her zu aufwendig. Hast Du das schon mal laufen lassen? Ist es zu langsam? Zitieren Link zu diesem Kommentar
mowch 10 Geschrieben 6. März 2014 Autor Melden Teilen Geschrieben 6. März 2014 ca 1 Minute in der Tabelle, nach dem ich den select alle Minuten ausführen möchte wird das so nicht klappen :wink2: Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 6. März 2014 Melden Teilen Geschrieben 6. März 2014 ca 1 Minute in der Tabelle, nach dem ich den select alle Minuten ausführen möchte wird das so nicht klappen :wink2: OK, dann so umbauen wie von mir vorgeschlagen. Alternativ mit Indexen experimentieren, vielleicht wird es dann schneller. Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 26. März 2014 Melden Teilen Geschrieben 26. März 2014 Moin, der beste Weg wäre wohl, wie schon hier vorgeschlagen wurde, eine Produktionsnummer mit in die Tabelle aufzunehmen. Die andere Lösung (nicht so schön) könnte so aussehen: Vorausetzungen: - ID ist chronologisch - eine Produktion ist immer zusammenhängend in der Tabelle vorhanden - es wird nur der aktuelle Type ermittelt SELECT SUM(Anzahl)WHERE ID > ( SELECT MAX(ID) -- letzte, höchste ID aller anderen Types FROM Tabelle WHERE Type NOT IN ( SELECT TOP 1 Type -- aktueller Type = letzte Zeile in der Tabelle FROM Tabelle ORDER BY ID DESC )) Der innerste Select (Ergebnis eine Zeile) ermittelt den aktuellen Type. Daraufhin wird die höchste ID aller anderen Types ermittelt (deine Grenze). Dann noch die Werte aller größeren ID summieren. Ist nicht getestet, gerade was die Laufzeit betrifft. Gruß Kai Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.