AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Berechnung zwischen mehreren SQL-Statements
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnung zwischen mehreren SQL-Statements

Ein Thema von spaniac · begonnen am 29. Jan 2010 · letzter Beitrag vom 6. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
spaniac

Registriert seit: 28. Jan 2010
20 Beiträge
 
#1

Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 14:30
Datenbank: MySQL • Version: 5.x • Zugriff über: JDBC Connector /
Hallo,

ich bin durch einen Tipp auf das DP-Forum gestossen und erhoffe mir ein paar Lösungsansätze für folgende Problemstellung:


Vorgeschichte

Ich nutze eclipse BIRT zur Auswertung einer MySQL-DB. Hierzu lassen sich in BIRT sog. Data Sets erstellen, die einzelne SQL-SELECT-Statements kapseln.


Ziel

Ziel soll es sein, innerhalb eines einzelnen SLEECT-Statements mehrere SELECT-Statements zu nutzen und zwischen den Ergebnistabellen der einzelnen SELECT-Statements Berechnungen anzustellen (*,+,-,/).


DB-Struktur

Schema: element
SQL-Code:
id | datum | intervall | wert | typ_id | bereich_id
1 | 2009-01-01 | 8:00 | 3.0 | 2 | 2
2 | 2009-01-01 | 8:30 | 2.0 | 3 | 1
...

Textuelle Beschreibung

(Alle Werte vom Typ 3 und Bereich 2,3,4) + (Alle Werte vom Typ 2 und Bereich 2,3,4) * (Alle Werte vom Typ 14 und Bereich 2,3,4) in Abhängigkeit des Datums und des Intervalls.


Pseudo-SQL

(SELECT e.wert FROM element e WHERE typ_id = 3 AND bereich_id IN (2,3,4)) + (SELECT e.wert FROM element e WHERE typ_id = 2 AND bereich_id IN (2,3,4)) * (SELECT e.wert FROM element e WHERE typ_id = 14 AND bereich_id IN (2,3,4)) Wobei hier eine Bedingung wie bei einem JOIN a la

abfrage1.datum=abfrage2.datum AND abfrage2.datum=abfrage3.datum AND abfrage1.intervall=abfrage2.intervall AND abfrage2.intervall=abfrage3.intervall mit eingebaut werden müsste. Dies geht meines Erachtens jedoch nicht, oder?


Frage
Wie kann ich eine solche Abfrage

a) überhaupt mit SQL realisieren?
b) in einem einzelnen SQL-SELECT-Statement realisieren?


Auch eine Stored Procedure wäre möglich, da BIRT die Möglichkeit bietet, eben solche anzusprechen.

Ich danke Euch schon im Voraus für die Hilfe, wenn es noch Fragen gibt: Immer her damit!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 14:36
Zitat:
a) überhaupt mit SQL realisieren?
Ja mit einer SP
Zitat:
b) in einem einzelnen SQL-SELECT-Statement realisieren?
Aus der SP kannst du dann die Ergebnise lesen
Markus Kinzler
  Mit Zitat antworten Zitat
spaniac

Registriert seit: 28. Jan 2010
20 Beiträge
 
#3

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 14:42
Wow, das war schnell

Bekomme ich die Ausgabe aus der SP dann so heraus, dass ich quasi eine "Temporäre" SQL-Table habe, die in etwa so aussieht:

SQL-Code:
id | datum | intervall | wert | typ_id | bereich_id
1 | 2009-01-01 | 8:00 | 3.0+2.0*3.0 | 2 | 2
2 | 2009-01-01 | 8:30 | 2.0+1.5*3.3 | 3 | 1
und wenn ja, wie könnte so eine beispielhafte SP aussehen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 14:43
Aus einer (selectable) SP kannst du wie aus einer Tabelle lesen, diese Joinen usw.

select <Feldliste> From <SPName>(<Parameter>) where ...
Markus Kinzler
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#5

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 14:48
Ich bin in mySQL nicht sonderlich firm, aber prinzipiell sollte es so gehen:
SQL-Code:
select e.datum,
       e.interval,
       sum (e.wert) * (
                       select sum (f.wert)
                         from element f
                         where f.typ = 14
                           and f.bereich in (2,3,4)
                           and f.datum = e.datum
                           and f.interval = e.interval
                      ) ergebnis
  from element e
  where e.typ in (2,3)
    and e.bereich in (2,3,4)
  group by e.datum,
           e.interval
ungetestet, hoffe es hilft weiter

PS: Wenn Du das auch noch nach typ und bereich aufgeschlüsselt brauchst, kann man das auch noch mit verbasteln
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
spaniac

Registriert seit: 28. Jan 2010
20 Beiträge
 
#6

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 15:39
@TBx: Das sieht schonmal gut aus.

Macht es nicht trotzdem Sinn, das ganze als Stored Procedure zu kapseln und dieser als Parameter Bereich, Typ und Datum als Parameter mitzugeben?

Weiterhin ist mir noch nicht klar, wenn einer der Select-Befehle für eine Datum/Intervall-Kombination keinen Eintrag enthält. Wird dies ignoriert oder als 0 gewertet?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 29. Jan 2010, 15:48
Ich würde es mit einer SP versuchen, da ein solcher Subselect nicht besonderst performant ist.
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 30. Jan 2010, 00:54
SQL-Code:
SELECT datum, interval, SUM(typ2) + SUM(typ3) * SUM(typ14) AS ergebnis
FROM (SELECT datum, interval,
             CASE WHEN typ = 2 THEN wert ELSE 0 END typ2,
             CASE WHEN typ = 3 THEN wert ELSE 0 END typ3,
             CASE WHEN typ = 14 THEN wert ELSE 0 END typ14
      FROM element
      WHERE bereich in (2, 3, 4)) x
GROUP BY datum, interval
  Mit Zitat antworten Zitat
spaniac

Registriert seit: 28. Jan 2010
20 Beiträge
 
#9

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 1. Feb 2010, 10:45
@omata: super, das sieht schonmal gut aus!

@mkinzler: mein wissen von einem crashkurs SP in Oracle ist leider schon zu alt und ich arbeite mich gerade erst wieder ein. hättest du einen vorschlag für eine SP, gerne auch nur ansätze, die ich mir dann weiter erarbeiten muss.
  Mit Zitat antworten Zitat
spaniac

Registriert seit: 28. Jan 2010
20 Beiträge
 
#10

Re: Berechnung zwischen mehreren SQL-Statements

  Alt 8. Feb 2010, 13:19
So, ich habe mich etwas weiter eingelesen. m.E. macht es Sinn, die SELECT-Statements einzeln in einer SP auszuführen, das Resultset in eine Variable zu speichern (geht das?) und dann innerhalb der SP die Berechnung auszuführen.

Passt das soweit von der Idee? Vorschläge sind willkommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:26 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