Berechnung in der Abfrage

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hallo,

probier mal

Code: Alles auswählen

SELECT A, B, A+B AS SumAB, A/B AS DivAB FROM Tabelle
Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Berechnung in der Abfrage

Beitrag von F3K Total »

... oder, wenn Du eine Spalte "Operator" als varchar in die Tabelle1 einfügst , dann auf "Abfrage in SQL-Ansicht erstellen..." und folgenden Code einfügst:

Code: Alles auswählen

SELECT "A", "Operator", "B", case when "Operator"='+' then "A"+"B" when "Operator"='-' then "A"-"B" when "Operator"='*' then "A"*"B" when "Operator"='/' then "A"/"B" else 0 END  as "Ergebnis" from "Tabelle1"
Dann noch den Knopf
SQL.png
einmal drücken, und speichern. Jetzt kannst Du in Tabelle1 den Operator vorgeben.

G R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hallo,

ach so, das sollte so sein, ich dachte, Du wolltest nur im SELECT-statement rechnen. Aber dann geht es sicher noch einfacher mit

Code: Alles auswählen

SELECT (SELECT A || B || C)
(ungetestet). Das geklammerte Statement liefert Dir '(Zahl A) (Operator B) (Zahl C)' und das zweite rechnet es aus.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Berechnung in der Abfrage

Beitrag von F3K Total »

Hallo Andreas,
habe ich mal ausprobiert weil es so schön einfach aussieht.
Will aber leider nicht klappen, Fehlermeldung (Single Value expected).
Kannst Du mal die komplette Syntax schicken?

G R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hallo,

sorry, eben seh ich auch, daß das ja nur die Hälfte des Statements ist:

Code: Alles auswählen

SELECT (SELECT A || B || C FROM Tabelle)
Vielleicht mußt Du die `||´ durch

Code: Alles auswählen

SELECT (SELECT CONCAT(A, CONCAT(B, C))) FROM Tabelle);
ersetzen -- soweit ich weiß, gilt `||´ nur für OOo/LO und nicht für z. B. MySQL.

Ein `Select 2+2;´ müßte Dir 4 liefern, d.h. wenn Du in den Tabellenspalten Zahlen und Operatoren hast und die so zusammenbaust, müßte es klappen.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Berechnung in der Abfrage

Beitrag von F3K Total »

Hallo Andreas,
nö klappt nicht.
|| und Concat (A,B) gehen zwar beide zum Verketten von Strings, was mich aber wundert, ist, dass Du zweimal "Select", aber nur einmal "from" in der Abfrage hast.
Hast Du noch Ideen?

G R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hallo,

naja, das select in Klammern sollte dir ja liefern (Zahl aus A) und (Operator aus B) und (Zahl aus C), also zB A + B und das äußere select sollte dann den Ausdruck einfach nur ausrechnen. Ich bossel morgen mal rum.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Berechnung in der Abfrage

Beitrag von F3K Total »

Hey Andreas,
was ist, hast du was rumgebosselt?
Nicht, dass aus Deiner Idee am Ende nur Kappes rauskommt! :lol:
"Müsste ..." hilft nämlich nicht ...
Bin wirklich gespannt, ob das mit dem Concat funktionieren kann.

Grüsse R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hallo,

jau, und so wie ich dachte klappts nicht, zumindest nicht mit MySQL. Das innere Statement liefert zwar '2+3' als Ergebnis, aber das äußere meldet dann einen Fehler. Aber 'select 2+3;' liefert das Ergebnis '5'. Schade :-(

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Berechnung in der Abfrage

Beitrag von F3K Total »

Schade, find ich auch :(
Gruß R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Berechnung in der Abfrage

Beitrag von AndreasJBittner »

Hi,

es geht doch! Nur rechnet OOo es leider nicht aus. Ein

Code: Alles auswählen

SELECT * FROM (SELECT Zahl1 || Operator || Zahl2)
liefert immerhin den korrekten String aus Zahl1 Operator und Zahl2. Aber wie jetzt das äußere SELECT zum Rechnen bewegen?

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Berechnung in der Abfrage

Beitrag von DPunch »

Aloha
AndreasJBittner hat geschrieben:liefert immerhin den korrekten String aus Zahl1 Operator und Zahl2. Aber wie jetzt das äußere SELECT zum Rechnen bewegen?
Nur durch Arbeiten mit Teilstrings, CASE-Verzweigung und viel Aufwand. Ein SELECT ist nunmal nicht dafür gedacht, mit einem String zu rechnen.
Im Gegensatz dazu ist ein

Code: Alles auswählen

select 2+3
natürlich kein String und wird daher auch logischerweise als mathematische Operation erkannt.
Antworten