Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion (https://www.delphipraxis.net/198116-sql-pro-monat-eine-spalte-quasi-eine-pivot-funktion.html)

juergen 4. Okt 2018 17:24

Datenbank: Pervasive • Version: 13 • Zugriff über: ODBC

SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion
 
Hallo zusammen,

folgende Tabellendatensätze sind vorhanden (stark vereinfacht)

Datum | PersNr | Istzeit
01.09.2018 | 4711 | 480
02.09.2018 | 4711 | 420
03.09.2018 | 4711 | 460

01.10.2018 | 4711 | 395
02.10.2018 | 4711 | 490


Nun suche ich eine SQL Abfragemöglichkeit, die mir das Ganze nach Monat pro Mitarbeiter summiert und mir die Summe in einer Spalte für September und eine 2. Spalte für Oktober ausgibt.

Das Ergebnis soll dann in etwa so aussehen:

PersNr | September Ist-Stunden | Oktober Ist-Stunden

4711 | 1360 | 885

Tja, und da hänge ich gerade fest. Habe schon einiges probiert...

Hat hier jemand einen Tipp wie ich das bewerkstelligen kann?

Vielen Dank schon mal vorab.

Olli73 4. Okt 2018 19:26

AW: SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion
 
Kenne mich mit Pervasive nicht so aus, aber so ungefähr sollte es funktionieren:

Code:
select
  persnr,
  sum(if(month(datum) = 09, istzeit, 0)) as sep,
  sum(if(month(datum) = 10, istzeit, 0)) as okt,
from
  tabelle
group by
  persnr

juergen 4. Okt 2018 19:51

AW: SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion
 
@Olli73,

oh Mann, ich war da viel zu kompliziert an die Sache ran gegangen.
Ich habe die Abfrage noch erweitert, dass nur die Datensätze zw. 01.09.2018 - 31.10.2018 geladen werden und das Ganze läuft akzeptabel.

Vielen Dank für deine Hilfe! :dp:

himitsu 4. Okt 2018 23:12

AW: SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion
 
In so manchem DBMS gibt es fertige Pivot-Funktionen, entweder als SQL-Function und oft sogar als C-Implementation im Hintergrund.
Bei Google suchensql crosstab
Bei Google suchenpervasive crosstab



Aggregate-Functions ala SUM verarbeiten alle Werte, die nicht NULL sind.
Könntest also probieren ob NULL statt 0 da noch flotter rechnet.

Statt dem IF könnte SUM eventuell auch mit Partitionen (OVER) oder Gruppierungen (GROUP BY) arbeiten?
https://stackoverflow.com/questions/...r-partition-by

himitsu 4. Okt 2018 23:24

AW: SQL: pro Monat eine "Spalte", quasi eine Pivot-Funktion
 
[dup del]


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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