![]() |
Datenbank: MySQL • Version: 5.x • Zugriff über: JDBC Connector /
Berechnung zwischen mehreren SQL-Statements
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 ![]() 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
SQL-Code:
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
SQL-Code:
Wobei hier eine Bedingung wie bei einem JOIN a la
(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))
SQL-Code:
mit eingebaut werden müsste. Dies geht meines Erachtens jedoch nicht, oder?
abfrage1.datum=abfrage2.datum AND abfrage2.datum=abfrage3.datum AND abfrage1.intervall=abfrage2.intervall AND abfrage2.intervall=abfrage3.intervall
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! |
Re: Berechnung zwischen mehreren SQL-Statements
Zitat:
Zitat:
|
Re: Berechnung zwischen mehreren SQL-Statements
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:
und wenn ja, wie könnte so eine beispielhafte SP aussehen?
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 |
Re: Berechnung zwischen mehreren SQL-Statements
Aus einer (selectable) SP kannst du wie aus einer Tabelle lesen, diese Joinen usw.
SQL-Code:
select <Feldliste> From <SPName>(<Parameter>) where ...
|
Re: Berechnung zwischen mehreren SQL-Statements
Ich bin in mySQL nicht sonderlich firm, aber prinzipiell sollte es so gehen:
SQL-Code:
ungetestet, hoffe es hilft weiter
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 PS: Wenn Du das auch noch nach typ und bereich aufgeschlüsselt brauchst, kann man das auch noch mit verbasteln |
Re: Berechnung zwischen mehreren SQL-Statements
@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? |
Re: Berechnung zwischen mehreren SQL-Statements
Ich würde es mit einer SP versuchen, da ein solcher Subselect nicht besonderst performant ist.
|
Re: Berechnung zwischen mehreren SQL-Statements
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 |
Re: Berechnung zwischen mehreren SQL-Statements
@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. |
Re: Berechnung zwischen mehreren SQL-Statements
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 :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz