Variable zur mehrmaligen Verwendung definieren

Maja999

Neuer Benutzer
Beiträge
1
Guten Tag!
Hier ist mein Latein zuende und ich bin über jeden Tipp dankbar.
Ich habe eine relativ komplizierte Datenbankabfrage, die später in iReport weiterverwendet werden soll.

In einer Spalte berechne ich sehr aufwändig einen Fertigstellungsgrad. Das ist unablässig und geht doch auf die Perfomance.
Nun sollen anhand dieses Fertigstellungsgrades noch einige Werte und Textmeldungen generiert werden.

Ich suche also nach einer Möglichkeit, diesen Fertigstellungsgrad nur 1mal je Zeile zu berechnen und später weiter zu verwenden, so oft ich mag.
Bisher habe ich zu Testzwecken diesen Fertigstellungsgrad jeweils neu berechnet, was aber später im Live-Betrieb nicht möglich sein wird. Die Alternative wäre, in iReports einige neue Subreports anzulegen und dort die jeweiligen Werte zu setzen.

Aber die Experten unter Euch haben sicher hier eine Lösung fürs SQL, oder?

Alles Probieren über "declare" oder "define" hat nicht zum Erfolg geführt und in den im Netz verfügbaren Informationen finde ich maximal Functions, Procedures oder udfs, was ich eigentlich vermeiden mag.

Wäre prima, wenn Ihr helfen könntet!

Maja



Mal ein simples und sinnfreies Beispiel:

------------------------------------------------------
Tabelle:

Name | Vorname | Alter | AnzahlKinder |
Müller | Peter | 22 | 1 |
Maier | Alex | 38 | 3 |
Schmidt | Martina | 28 | 2 |

------------------------------------------------------
Select bisher:

select Vorname, Name, Alter,AnzahlKinder,MittelwertAlterKinder = (Alter + AnzahlKinder)/2,DoppelterMittelwertAlterKinder = 2* (Alter + AnzahlKinder)/2
------------------------------------------------------
Gesucht:

Definition VariableMittelwert = xxx

select select Vorname, Name, Alter,AnzahlKinder,MittelwertAlterKinder =VariableMittelwert ,DoppelterMittelwertAlterKinder = 2* VariableMittelwert
 
Werbung:
Speichere Dein Ergebnis einfach in einer Zwischentabelle.
SQL hat keine Variablen wie man sie von einer Programmiersprache her kennt.
 
materialized views könnten helfen. Übrigens: das Alter zu speichern ist etwas sinnfrei, weil das ändert sich für die meisten Leute 1 mal im Jahr. Außer, man hat am Schalttag Geburtstag.
 
Du kannst einen errechneten Wert in einer Variable speichern und dann später in der Zeile damit weiter rechnen

Hier mal ein genauso sinnfreies Beispiel:
Code:
mysql> SELECT * FROM produkte;
+----+-----------+---------+
| id | kategorie | gekauft |
+----+-----------+---------+
|  1 | a         |       2 |
|  2 | a         |      99 |
|  3 | c         |       3 |
|  4 | b         |       9 |
+----+-----------+---------+
4 rows in set (0,01 sec)

mysql> SELECT
    ->     id,
    ->     kategorie,
    ->     gekauft
    -> FROM produkte;
+----+-----------+---------+
| id | kategorie | gekauft |
+----+-----------+---------+
|  1 | a         |       2 |
|  2 | a         |      99 |
|  3 | c         |       3 |
|  4 | b         |       9 |
+----+-----------+---------+
4 rows in set (0,00 sec)

mysql> SELECT
    ->     id,
    ->     kategorie,
    ->     gekauft,
    ->     @tmp01 := (gekauft * id ) -1 AS berechnet,
    ->     @tmp01 * 13 - 7 AS weiter_berechnet
    -> FROM produkte;
+----+-----------+---------+-----------+------------------+
| id | kategorie | gekauft | berechnet | weiter_berechnet |
+----+-----------+---------+-----------+------------------+
|  1 | a         |       2 |         1 |                6 |
|  2 | a         |      99 |       197 |             2554 |
|  3 | c         |       3 |         8 |               97 |
|  4 | b         |       9 |        35 |              448 |
+----+-----------+---------+-----------+------------------+
4 rows in set (0,00 sec)

mysql>
 
Du kannst auch den Select schachteln und dann immer weiter damit arbeiten:
Code:
SELECT spalte FROM ( SELECT berechnung AS spalte FROM tabelle ) t
Allerdings wird dir MySQL hier vermutlich in Sachen Performance auf die Füße fallen, nützliche Features kann es auch nicht.
 
Werbung:
Nö, nö, ist alles Serverseitig. Kann ja auch gar nicht anders funktionieren,
da sonst der Server alle Felder zum Client schicken müsste, damit der Client
eventuelle Funktionen mit der Variable und einem Feld durchführen kann.
 
Zurück
Oben