AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken mehrere Spalten in Ergebnismenge
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere Spalten in Ergebnismenge

Ein Thema von Hansa · begonnen am 4. Dez 2012 · letzter Beitrag vom 6. Jan 2013
Antwort Antwort
Seite 3 von 4     123 4      
Furtbichler
(Gast)

n/a Beiträge
 
#21

AW: mehrere Spalten in Ergebnismenge

  Alt 7. Dez 2012, 07:43
[
Haha, Nach der Überheblichkeit kommt meist der tiefe Fall oder zumindest die Erleuchtung.
Schon bemerkt? Wenn ich tief falle, musst Du hoch fliegen, damit wir uns in der Mitte treffen.

Soviel zum Niveauunterschied.


Und damit es nicht bierernst wird:
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#22

AW: mehrere Spalten in Ergebnismenge

  Alt 15. Dez 2012, 14:52
Ich habe jetzt hier folgendes im SELECT einer SP stehen:

Code:
    CASE JAHR
      WHEN :VERGLJAHR THEN JAHR
      ELSE 0
    END AS VERGLJAHROUT,
    CASE JAHR WHEN :VERGLJAHR THEN
    SUM (CASE MONAT WHEN 1 THEN UMSATZ
         ELSE 0
         END)
    ELSE 0
    END AS MON1,
    CASE JAHR WHEN :VERGLJAHR THEN
    SUM (CASE MONAT WHEN 2 THEN UMSATZ
         ELSE 0
         END)
    ELSE 0
    END AS MON2
Das Ganze soll jetzt für 2 Jahre und dann insgesamt 24 Monate funktionieren. Es geht zwar jetzt so auch, aber an allen Ecken frage ich ja den Parameter für das jewilige Jahr ab. Kann man das kürzer hinkriegen ? Also ungefähr so :

Code:
    CASE JAHR
      WHEN :VERGLJAHR THEN /*  hier 12 Monate von VerglJahr behandeln
      WHEN :AUSGJAHR THEN /*   12 Monate von AusgJahr...
      ELSE 0
    END AS ??
Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#23

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 18:19
Das ist jetzt alles soweit erledigt. Allerdings noch eine Frage :

Wie werden die angezeigten Felder gruppiert ? Mit dem hier :

Code:
returns (
    artnr integer,
    mon01 decimal(15,2),
    mon02 decimal(15,2),
    mon03 decimal(15,2),
...
    altmon01 decimal(15,2),
    altmon02 decimal(15,2),
    altmon03 decimal(15,2),
...
INTO :ARTNR,
  :MON01,:MON02,:MON03,...ALTMON01,:ALTMON02,:ALTMON03...
wird mir zumindest in IBEXPERT folgendes angezeigt :

von links nach rechts : altmon1,altmon2,mon01,mon02,altmon3, usw.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 18:49
Wie willst du Gruppieren?
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#25

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 19:00
Ich will das zusammenhängend auf einen Blick sehen. MON1..MON12 und dann ALTMON1..ALTMON12,

Momentan sieht so aus : siehe Anhang. Also gemischt. Warum ?
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 19:08
Wie sieht der Select hierzu aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#27

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 19:12
Code:
  FOR SELECT
    A.NR,
    SUM (case MONAT||JAHR when 1||:AUSGJAHRVAR then UMSATZ else 0 END) AUSGJAHR_M1,
    SUM (case MONAT||JAHR when 2||:AUSGJAHRVAR then UMSATZ else 0 END) AUSGJAHR_M2,
    SUM (case MONAT||JAHR when 3||:AUSGJAHRVAR then UMSATZ else 0 
...
    SUM (case MONAT||JAHR when 1||:VERGLJAHRVAR then UMSATZ else 0 END) VERGLJAHR_M1,
    SUM (case MONAT||JAHR when 2||:VERGLJAHRVAR then UMSATZ else 0 END) VERGLJAHR_M2,
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: mehrere Spalten in Ergebnismenge

  Alt 5. Jan 2013, 19:29
Ich meinte die Abfrage der SP nicht deren Code. Hier kannst du ja die Reihenfolge der Felder vorgeben.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#29

AW: mehrere Spalten in Ergebnismenge

  Alt 6. Jan 2013, 01:36
Welche Abfrage ? Die aus dem Programm ? Wir sind jetzt lediglich bei IBExpert angekommen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#30

AW: mehrere Spalten in Ergebnismenge

  Alt 6. Jan 2013, 02:14
Also ich würde das Problem mit einem Memory-Dataset lösen.
Schritt 1:
man benötigt eine Abfrage gruppiert und sortiert nach ArtikelNr, Jahr und Monat:
Code:
ArtikelNr | Jahr | Monat | Summe  | MaxWert | Anzahl
=============================================================
 100      | 2011 | 1     | 6785.70 | 559.00  | 44
 100      | 2011 | 3     | 2782.50 | 120.0   | 17
....
Zusätzlich zur Summe des Preises habe ich noch den Max. Artikelbetrag und die Anzahl aufgenommen.
Die weiteren Felder bekommt man quasi zum Nulltarif und kann damit später interessante statische Daten anzeigen.

Schritt 2:
Man erzeugt dynamisch zur Laufzeit die Felder für das Memory-Dataset.
Das Memory-Dataset stellt dann die Pivot-Tabelle dar.
Dazu muss man in einer Schleife über alle Datensätze der obigen Abfrage laufen und ein neues Feld vom Typ Currency erzeugen.
Man erzeugt z.B. beim Datensatz für Jahr=2011 und Monat=3 das Feld "J2011M03" oder man macht es so wie man es eben benötigt.
Es muss aber geprüft werden, ob das Feld schon angelegt ist.
Im Event AfterOpen des Memory-Datasets kann man den Feldern über das Property DisplayLabel lesbare Bezeichnungen geben.

Schritt 3:
In einer weiteren Schleife (2. Durchlauf) über alle Datensätze wird das Memory-Dataset befüllt.
Dabei muss man prüfen, ob schon ein Datensatz zum Artikel existiert.
Falls nein mit Append einen neuen Dataset anlegen; falls ja Datensatz mit Edit verändern.
Man hat jetzt die Möglichkeit die Summe, MaxWert, Anzahl oder Durchschnitt in das Memory-Dataset zu schreiben.

Vorteile:
* maximale Flexibilität (kein Problem die Daten quartalsweise oder je Kalenderwoche zu präsentieren)
* Unabhängigkeit von der Datenbank
* wesentlich einfachere SQL-Abfrage (schneller und einfacher zu verstehen)
* SQL-Abfrage kann leichter mit einer einschränkenden WHERE-Bedingung erweitert werden
* Grundprinzip ist leicht auf andere Tabellen (Bestellungen, Rückläufer,...) umsetzbar
Nachteil:
* man benötigt ein Memory-Dataset und geschätzte 50 bis 100 Zeilen Sourcecode zur Umsetzung

Man könnte eine Klasse schreiben, die die Schritte 2 und 3 konfigurierbar und allgemeingültig umsetzt.

Geändert von sx2008 ( 6. Jan 2013 um 02:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 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