Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   group by auf 1 Spalte, aber noch weitere Spalten ausgeben (https://www.delphipraxis.net/192569-group-auf-1-spalte-aber-noch-weitere-spalten-ausgeben.html)

juergen 1. Mai 2017 16:39

Datenbank: Pervasive • Version: 12 • Zugriff über: PDAC

group by auf 1 Spalte, aber noch weitere Spalten ausgeben
 
Hallo,

ich tue mich schwer mit einer bestimmten Anforderung.
So wie ich es kenne, müssen in einer Group by-Klausel *alle* Spalten aufgeführt werden, die im Select stehen und nicht aggregiert sind.

Ich will nun nur nach 1 Spalte gruppieren, aber weitere Spalten mit ausgeben.

Das funktioniert:
Code:
Select LTrim(CA.PersNr) as PersNr,
Sum(Case when F3.Tages_Sollzeit <> '' and F3.Flag_Ft <> 2 then (1) else 0 end) as Integer,
Sum(1) as Integer
from Pers_Buchungen_PC as F3, Personalstamm AS CA
LEFT JOIN Werk AS B1 ON CA.StandortNr = B1.StandortNr
LEFT JOIN Abteilung AS B2 ON CA.Abteilung = B2.AbteilungNr
LEFT JOIN Orgaeinheit AS MF ON CA.OrgaEinNr = MF.OrgaEinNr        
LEFT JOIN GruppePerson AS MG ON CA.GruppenNr = MG.GruppenNr
LEFT JOIN KST_Stamm AS FQ ON CA.Kostenstelle = FQ.KStelleNr
where CA.Identifikation = F3.RecID_CA and F3.Flag_Kr = 2 and
F3.Datum > cast(Datepart(Year,Current_date())-2 as Char(4)) + '1231' and F3.Datum < cast(Datepart(Year,Current_date()) as Char(4)) + '0101'
group by PersNr
Ich brauche aber sowas:
Code:
Select LTrim(CA.PersNr) as PersNr, CA.Name, CA.Vorname, B1.Bezeichnung, ..... // <-- hier weitere Spalten, die aber nicht in der "Group by-Klausel" stehen dürfen wegen dem richtigen
//Ergebnis der Summierungen (Summen sollen immer pro Person sein)
Sum(Case when F3.Tages_Sollzeit <> '' and F3.Flag_Ft <> 2 then (1) else 0 end) as Integer,
Sum(1) as Integer
from Pers_Buchungen_PC as F3, Personalstamm AS CA
LEFT JOIN Werk AS B1 ON CA.StandortNr = B1.StandortNr
LEFT JOIN Abteilung AS B2 ON CA.Abteilung = B2.AbteilungNr
LEFT JOIN Orgaeinheit AS MF ON CA.OrgaEinNr = MF.OrgaEinNr        
LEFT JOIN GruppePerson AS MG ON CA.GruppenNr = MG.GruppenNr
LEFT JOIN KST_Stamm AS FQ ON CA.Kostenstelle = FQ.KStelleNr
where CA.Identifikation = F3.RecID_CA and F3.Flag_Kr = 2 and
F3.Datum > cast(Datepart(Year,Current_date())-2 as Char(4)) + '1231' and F3.Datum < cast(Datepart(Year,Current_date()) as Char(4)) + '0101'
group by PersNr
Ich vermute ich muss die benötigten Spalten die nicht in der Group by-Klausel stehen in einer Unterabfrage ausgeben.
Da weiß ich aber nicht wie ich das hinbekomme. Ich habe schon einiges mit Union versucht, scheitere aber an der Syntax und am Verständnis.

Weiß hier jemand Rat?

Vielen Dank schon mal vorab!

Bernhard Geyer 1. Mai 2017 16:44

AW: group by auf 1 Spalte, aber noch weitere Spalten ausgeben
 
Wenn du Views anlegen darfst dann mach es so:

1, Definierte dein SELECT mit group by als View
2, Nimm dieses View und füge über einen einfachen Join deine weiteren Spalten hinzu.

juergen 1. Mai 2017 19:06

AW: group by auf 1 Spalte, aber noch weitere Spalten ausgeben
 
Danke Bernhard! Leider habe ich nur einen Readonly Zugriff auf die DB.
Das Problem hat sich aber erledigt.
Da ich die Daten in Delphi noch weiter aufbereiten muss, komme ich über 2 Querys die ich dann über Delphi-Boardmittel zusammen führe, zu meinem Ergebnis.
Allen noch einen schönen Feiertag!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz