AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] Problem mit doppelter Ergebnismenge
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Problem mit doppelter Ergebnismenge

Ein Thema von Igotcha · begonnen am 6. Okt 2004 · letzter Beitrag vom 7. Okt 2004
Antwort Antwort
Seite 2 von 2     12   
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#11

Re: [SQL] Problem mit doppelter Ergebnismenge

  Alt 7. Okt 2004, 13:21
Hi Igotcha!

Dein Problem laesst sich mit Hilfe 3 Views loesen:

1. VIEW1 : Summen pro Position aus der "DATEN_IST" Tabelle (daten_ist_summe_pro_position)
SQL-Code:
SELECT position, sum(jan) AS jan0,
                 sum(feb) AS feb0,
                 sum(mar) AS mar0,
                 sum(apr) AS apr0,
                 sum(mai) AS mai0,
                 sum(jun) AS jun0,
                 sum(jul) AS jul0,
                 sum(aug) AS aug0,
                 sum(sep) AS sep0,
                 sum(okt) AS okt0,
                 sum(nov) AS nov0,
                 sum(dez) AS dez0
FROM daten_ist, positionen
WHERE position=positionen.posid and pagid in ("PIM5231", "PIM5244") and positionen.pgid=2000
GROUP BY position;
Ergebnis siehe Anhang: view1.jpg

2. VIEW2 : Summen pro Position aus der "DATEN_PROGNOSE" Tabelle (daten_prognose_summe_pro_position)
SQL-Code:
SELECT position, sum(jan) AS jan0,
                 sum(feb) AS feb0,
                 sum(mar) AS mar0,
                 sum(apr) AS apr0,
                 sum(mai) AS mai0,
                 sum(jun) AS jun0,
                 sum(jul) AS jul0,
                 sum(aug) AS aug0,
                 sum(sep) AS sep0,
                 sum(okt) AS okt0,
                 sum(nov) AS nov0,
                 sum(dez) AS dez0,
                 sum(jan_1) AS jan1,
                 sum(feb_1) AS feb1,
                 sum(mar_1) AS mar1,
                 sum(apr_1) AS apr1,
                 sum(mai_1) AS mai1,
                 sum(jun_1) AS jun1
FROM daten_prognose, positionen
WHERE position=positionen.posid and pagid in ("PIM5231", "PIM5244") and positionen.pgid=2000
GROUP BY position;
Ergebnis siehe Anhang: view2.jpg

3. View3: Summen pro Position aus VIEW1 und VIEW2
SQL-Code:
SELECT i.position, i.jan0 as jani,
                   i.feb0 as febi,
                   i.mar0 as mari,
                   i.apr0 as apri,
                   i.mai0 as maii,
                   i.jun0 as juni,
                   i.jul0 as juli,
                   p.aug0 as augp,
                   p.sep0 as sepp,
                   p.okt0 as oktp,
                   p.nov0 as novp,
                   p.dez0 as dezp
FROM daten_ist_summe_pro_position AS i, daten_prognose_summe_pro_position AS p
WHERE i.position=p.position;
Ergebnis siehe Anhang: view3.jpg

Viele Grüße
Markus
Miniaturansicht angehängter Grafiken
view1.jpg   view2.jpg   view3.jpg  
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#12

Re: [SQL] Problem mit doppelter Ergebnismenge

  Alt 7. Okt 2004, 14:05
Hi Markus,

das sieht im Ergebnis schon gut aus
(wobei ich mich frage, wie im Bild 3 ein "apr0" zustande kommt)

Auf Kostenstellenebene (also nur 1) erfolgt die Generierung meiner Ansicht (die ja auch funktioniert) in 1-2 Sekunden. Deine Lösung sieht mir da schon nach mehr aus.

Nur, wie setze ich das performant im Programm um?

Hättest Du da evtl. einen Codeschnipsel, wie man Views erzeugt und diese verwendet?

Danke und Gruß
Igotcha

EDIT: Habe gerade gesehen, dass es das "CREATE"-Kommando erst seit 5.0.1 gibt und das ist ein aktuelles Snapshot Release - naja, mal updaten
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#13

Re: [SQL] Problem mit doppelter Ergebnismenge

  Alt 7. Okt 2004, 14:56
Hi Igotcha!

Leider habe ich kein Codeschnipsel, den Du als fertige Lösung verwendet könntest.
Du kannst aber einfach jeweils eine TQery für jede SELECT-Anweisung erstellen, etwa so:
Delphi-Quellcode:
...
Var
    ist_data: TQuery;
    prognose_data: TQuery;
    result_data: TQuery;
    ...
begin
    ...
    ist_data.SQL.Clear;
    ist_data := TQuery.Create(self);
    ist_data.SQL.Add('select … ');
    ist_data.SQL.Add('from ist_data … ');
    ist_data.Prepare;
    ist_data.Open;
    ...
    prognose_data.SQL.Clear;
    prognose_data := TQuery.Create(self);
    prognose_data.SQL.Add('select … ');
    prognose_data.SQL.Add('from prognose_data … ');
    prognose_data.Prepare;
    prognose_data.Open;
    ...
    result_data.SQL.Clear;
    result_data := TQuery.Create(self);
    result_data.SQL.Add('select … ');
    result_data.SQL.Add('from ist_data, prognose_data … ');
    result_data.Prepare;
    result_data.Open;
    ...
Dadurch erstellst du “Views”, die du weiter verarbeiten könntest.

Und am Ende:
Delphi-Quellcode:
    ...
    ist _query.Close;
    ist _query.Destroy;

    prognose _query.Close;
    prognose _query.Destroy;

    result _query.Close;
    result_query.Destroy;
    ...
Kleine Unreinheit: "apr0" soll "apri" heißen (sorry).

Viele Grüße
Markus
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#14

Re: [SQL] Problem mit doppelter Ergebnismenge

  Alt 7. Okt 2004, 15:00
Danke Dir.

Ich habe gerade die neueste mysql installiert und das "CREATE VIEW" funktioniert nun. Ich muss jetzt mal sehen, was performanter ist. Wie Du evtl. aus der Tabelle "positionen" sehen kannst, muß ich pro Sicht für ca. 20 Gruppen die Unterpositionen ermitteln - sprich als ca. 20 mal eben diese drei Schritte durchführen.

Werde am Wochenende mal ausführlich testen.

Gruß Igotcha
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:30 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