Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select mit horizontal und vertikalen Daten (https://www.delphipraxis.net/201347-select-mit-horizontal-und-vertikalen-daten.html)

Dumpfbacke 14. Jul 2019 15:08

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX

Select mit horizontal und vertikalen Daten
 
Hallo Delphianer,
ich habe hier zwei Tabellen und möchte gerne ein Ergebnis aus der Tabelle2 haben was zur Tabelle1 ein "passt".

Hier mal die Spalten Tabellen

Tabelle1:
Delphi-Quellcode:
Jahr,Kunde,Monat_01,Monat_02,Monat_03,Monat_04,Monat_05,Monat_06,Monat_07,Monat_08,Monat_09,Monat_10,Monat_11,Monat_12


Tabelle2:
Delphi-Quellcode:
Jahr,Kunde,Monat,Betrag,Rechnugsnr, ...



In der Tabelle1 sind die Planzahlen (Umsätze) je Kunden je Monat für das aktuelle Jahr vorhanden. In der Tabelle2 sind dann die Beträge der einzelenen Rechnungen je Monat, je Jahr vorhanden. Als Ergebnis möchte in nun das die Werte der Tabelle2 auch horizontal und nicht vertikal sind. D.h. ich möchte je Kunde je Jahr eine Zeile haben in dem dann die Monate hintereinander stehen. Die Beträge sollte je Monat summiert sein, da es ja mehr als eine Rechnung je Monat geben kann.

Hat da jemand ein Tip für mich wie ich es hinbekommen kann. Es wäre schon wenn es mit deinen Select gehen würd und ich nicht dazu extra was in meinen Programm machen müsste.

Danke schon einmal Tanja

prognase 14. Jul 2019 17:18

AW: Select mit horizontal und vertikalen Daten
 
Hi Tanja,

mit Firebird arbeite ich nicht, habe es mal mit einem anderen SQL-Dialekt probiert (SAS). So in diese Richtung könnte es klappen mit einfachen SQL-Mitteln. Einige Implementierungen unterstützen auch ein PIVOT-Kommando, da evtl. noch mal selber suchen. Hier also was einfaches als Denkanstoss, für mehr Spalten einfach mehr Summen o.ä. reinnehmen:

Code:
create table SalesHorizontal as
  select Jahr,
         Kunde,
         sum (ifn (Monat= 1, Betrag, 0)) as Monat_01,
         sum (ifn (Monat= 2, Betrag, 0)) as Monat_02,
         sum (ifn (Monat= 3, Betrag, 0)) as Monat_03,
         sum (ifn (Monat= 4, Betrag, 0)) as Monat_04,
         sum (ifn (Monat= 5, Betrag, 0)) as Monat_05,
         sum (ifn (Monat= 6, Betrag, 0)) as Monat_06,
         sum (ifn (Monat= 7, Betrag, 0)) as Monat_07,
         sum (ifn (Monat= 8, Betrag, 0)) as Monat_08,
         sum (ifn (Monat= 9, Betrag, 0)) as Monat_09,
         sum (ifn (Monat=10, Betrag, 0)) as Monat_10,
         sum (ifn (Monat=11, Betrag, 0)) as Monat_11,
         sum (ifn (Monat=12, Betrag, 0)) as Monat_12
    from SalesVertical
    group by Jahr, Kunde;
Statt IFN bei Firebird die passende Funktion suchen, die ein numerisches Ergebnis einer IF-Funktion liefert, gibt es bestimmt.

Viele Grüße,
Matthias

Dumpfbacke 14. Jul 2019 19:09

AW: Select mit horizontal und vertikalen Daten
 
Hallo Matthias,
danke das war es. So funktioniert es echt super. Bei Firebird ist es iif

Tanja


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