PDA

View Full Version : Sql Summen bilden 2.Teil



Seiten : [1] 2

tarkusch
12-12-12, 16:16
Hallo,

ich hätte gerne von der Datei FILE1, alle Vorgabezeiten distinct(F01GNR, F01TNR und F01ZNR) summiert.

Diese 3 Felder ergeben einen Arbeitsschritt mit einer Vorgabezeit.
Jeder Mitarbeiter kann einen Key/Arbeitsschritt der schon angestempelt wurde auch anstempeln.

Mein Problem ist das ich keine korrekte Summe über die gesamten Vorgabezeiten eines Auftrages bekomme.

In der Datei File2 stehen die gestempelten Arbeitszeiten.

Könnt ihr mir bitte helfen?


WITH
X AS
(SELECT F01AUF, F01FNR, F01PNR,
SUM(distinct(F01VZT)) F01VZT
FROM FILE1
GROUP BY F01AUF, F01FNR, F01PNR),
Y AS (SELECT
F02AUF, F02FNE, F02PNR, F02DAT,
SUM(F02MIN) F02MIN
FROM FILE2
GROUP BY F02AUF, F02FNE, F02PNR, F02DAT)

SELECT
SUM(F02MIN), SUM(F01VZT) FROM X,Y
WHERE F01AUF = F02AUF AND F02FNE =
F01FNR AND F02PNR = F01PNR AND
F01AUF = 55523 and F02AUF = F01AUF

F01GNR 2 0 TEXT('Gruppennummer')
F01TNR 4 0 TEXT('Textnummer')
F01ZNR 2 0 TEXT('Zeilennummer')
F01VZT 5 0 TEXT('Vorgabezeit')

tarkusch
12-12-12, 19:30
Ist es eigentlich möglich, wenn ich die 4 Felder concate, dass ich die Summe von den Vorgabezeiten bekomme?

Habe einige Varianten ausprobiert, aber erhalte nicht die korrekten Daten.

Oder muss ich das programmiermäßig erledigen?

Danke und Gruß



WITH X AS(
SELECT F01VZT,
DISTINCT (DIGITS(F01GNR) CONCAT DIGITS(F01TNR) CONCAT
DIGITS(F01ZNR) CONCAT DIGITS(F01VZT)) AS XXX
FROM FILE1 WHERE F01AUF = 55523
GROUP BY KWEVZT, XXX)

SELECT
SUM(F01VZT) FROM X

F01GNR 2 0 TEXT('Gruppennummer')
F01TNR 4 0 TEXT('Textnummer')
F01ZNR 2 0 TEXT('Zeilennummer')
F01VZT 5 0 TEXT('Vorgabezeit')

andreaspr@aon.at
12-12-12, 20:23
Hallo,
kannst du ein Beispiel schicken, welche Daten du hast und was du dir für ein Ergebnis erwartest.
In deinem Beispiel verwendest du auch DISTINCT. Damit fehlen dir eventuell einige Sätze für die Summe.

lg Andreas

tarkusch
12-12-12, 20:49
ich habe Buchungen im FILE1.
Der Key für die Buchung besteht aus 3 numerischen Feldern:
F01GNR 2 0
F01TNR 4 0
F01ZNR 2 0

Ich bräuchte die 3 Felder Distinct um jeweils nur einmal die Vorgabezeit(eigentlich die höchste) zu erhalten.

Ich habe jetzt versucht die 3 Keyfelder zusammenzufügen und die Summe zusätzlich.
Anschließend hätte ich mir gedacht das ich evtl. mit Substr die Summen der Vorgabezeiten erstellen kann.

Bin beim googlen ob das überhaupt so funktionieren kann.

Hast du vielleicht einen besseren Ansatz?


Gruß

Tarki

andreaspr@aon.at
12-12-12, 21:27
Ich bin mir noch immer nicht sicher dich richtig verstanden zu haben.
Eventuell suchst du sowas?!:


Select distinct F01GNR concat F01TNR concat F01ZNR
from (
Select F01GNR, F01TNR, max (F01ZNR) F01ZNR
from xyz
group by f01gnr, f01tnr
) t1

Ansonsten schreib bitte mal ein paar Beispiel Sätze wie sie in der Tabelle stehen und dann wie die Sätze im Ergebnis aussehen sollen.

Ansonsten wünsch ich noch eine nicht all zu lange Nacht ;)

tarkusch
12-12-12, 22:10
Das sind Buchungen zu einem Auftrag.



SEQ GNR TNR ZNR VGZT PNR
1 90 100 1 8 405
2 16 400 2 120 444
3 16 400 1 120 444
4 19 500 3 240 405
5 19 500 4 75 444
6 19 500 3 240 510
7 24 1 1 120 601
8 34 100 2 75 405
9 34 100 12 15 405
10 34 200 1 48 444


Ich möchte hier die gesamte Vorgabezeit(VGZT) ermitteln.
In diesem Auftrag haben die Penr 405 und 510 gemeinsam auf einer Tätigkeit gearbeitet.
Ich erhalte bei meiner Abfrage immer die Vorgabezeit von seq 4 und 6.
Die sollte er nur einmal summieren, dh. das distinct über die 3 Felder.

Sollte ein Arbeitsschritt (GNR, TNR, ZNR) mehrfach vorkommen, dann bräuchte ich die größte Vorgabezeit von diesen Arbeitsschritten.

Gruß und Gute Nacht.

Tarki

B.Hauser
13-12-12, 06:35
Meinst Du sowas?


Select GNR, TNR, ZNR, Max(VGZT)
from YourFile
Group By GNR, TNR, ZNR

Birgitta

andreaspr@aon.at
13-12-12, 07:47
Gut, jetzt wissen wir schon mal wie die Quelle aussieht. Jetzt versteh ich das schon besser.
Kannst du bitte auch noch das Ergebnis posten, welches du dir für diese Quelle vorstellst.
Das würde uns (oder zumindest mir) sicher auch noch Helfen.

tarkusch
13-12-12, 08:20
Morgen,

das Statement von Frau Hauser bekomme ich schon die richtigen Einzeldaten.

Select GNR, TNR, ZNR, Max(VGZT)
from YourFile
Group By GNR, TNR, ZNR

aber wie kann ich da die gesamten Summen über VGZT bilden?

Dachte mir das das so funktionieren müsste:


Select SUM(VGZT) from (
Select GNR, TNR, ZNR, Max(VGZT)
from YourFile
Group By GNR, TNR, ZNR)
as X

aber bekomme da die Meldung:
Spalte VGZT nicht in angegebenen Tabellen.

Was mache ich da schon wieder falsch?

B.Hauser
13-12-12, 08:33
Du musst dem Kind Max(VGZT) einen Namen geben und diesen verwenden.

Ich würde an dieser Stelle auch keinen Sub-Select verwenden sondern eine CTE (Common Table Expression) vorziehen. Verschachtelte Sub-Selects werden schnell unüberschaubar.


With x as (Select GNR, TNR, ZNR, Max(VGZT) MaxVGZT
From YourFile
Group By GNR, TNR, ZNR)
Select Sum(MaxVGZT)
From X;

Birgitta