Daten in eine Zeile zusammenfassen

Dann muss als erstes t.id_training = 11018 raus, und dann müssen in dem finalen SELECT die JOIN Bedingungen noch die id_training mit verwenden
 
Werbung:
Du kannst Spalten (oder ihr Aggregat) auch addieren.

Code:
with data as (
  SELECT tmp1.serie,
         tmp1.id_training,
         sum(tmp1.ergebnis_zehntel) AS sum_zehntel
  FROM (
    select (row_number() OVER (PARTITION BY t.id_training, t.id_schuss_typ ORDER BY t.id_shot) - 1) / 10 + 1 AS serie,
           t.id_shot,
           t.ergebnis_zehntel,
           t.id_training,
           t.id_schuss_typ,
           t.id_schuetze,
           s.schuetzen_name
  FROM t_transfer_rci_shot_h t
    JOIN t_schuetzen s ON t.id_schuetze = s.id_schuetzen
  WHERE t.id_training >= 11018
    and s.schuetzen_name like 'Sim%'
    and t.id_schuss_typ = 2
  ) tmp1
  GROUP BY tmp1.serie, tmp1.id_training, tmp1.id_schuss_typ
)
select s1.sum_zehntel as summe_1, s2.sum_zehntel as summe_2, s3.sum_zehntel as summe_3
,s1.sum_zehntel + s2.sum_zehntel + s3.sum_zehntel as summe_total
from data as s1
  join data as s2 on s1.id_training = s2.id_training and s2.serie = 2
  join data as s3 on s1.id_training = s3.id_training and s3.serie = 3
where s1.serie = 1;
 
Danke Dir, addieren funktioniert warum auch immer, ich hatte es ähnlich versucht aber eben nur ähnlich da gings nicht

bleibt mein Problem der Listen Erstellung ich versteh das mit der von castorp angesprochenen zusätzlichen JOIN Bedingung nicht
 
bleibt mein Problem der Listen Erstellung ich versteh das mit der von castorp angesprochenen zusätzlichen JOIN Bedingung nicht
Das hatte ich schon mit eingebaut (bzw. "dazugefrikelt"). Im letzten Code-Stand gab es in dem Vor-Select die Bedingung WHERE t.id_training = 11018. Damit hat man ja nur genau eine ID Training betrachtet und deren Summen berechnet. Es gibt zwar Stellen (GROUP BY und PARTITION BY) wo das zusätzlich eine Rolle spielt und verwendet wurde, aber alles nur innerhalb dieses Selects. Das, was dann als "data" zur Verfügung gestellt wird, enthält auch noch die ID und wird dann mit sich selbst gejoint. In der Join-Condition stand das aber vorher nicht drin.

Wenn du die WHERE-Bedingung dann entfernst oder veränderst, so wie ich z.B. auf WHERE t.id_training >= 11018, dann kommen mehrere Datensätze mit dem selben Wert in "serie". Und wenn dann nur auf Basis von "serie" gejoint wird, wird das Ergebnis ein Vielfaches von dem, was du erwartest. Anzahl der ID Training hoch 3. Daher läuft deine Abfrage vermutlich auch "ewig". Bei 500 ID Training sind das schon 125k Ergebniszeilen, die noch dazu keinen Sinn ergeben.

Daher habe ich die Join-Condition ergänzt: on s1.id_training = s2.id_training and s2.serie = 2. Damit sollte das funktionsfähig sein. Die Anzahl der Ausgangsdatensätze, also verschiedener ID Training, spielt natürlich dennoch eine Rolle für die Performance. Ebenso ein Index oder seine Abwesenheit. Aber eine Abfrage mit z.B. 500 ID Training sollte erstmal kein Problem sein.
 
Werbung:
Zurück
Oben