![]() |
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:
Ich brauche aber sowas:
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
Code:
Ich vermute ich muss die benötigten Spalten die nicht in der Group by-Klausel stehen in einer Unterabfrage ausgeben.
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 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! |
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. |
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 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz