Vorzeichen und Wert aus separaten Spalten verschmelzen

halligalli

Neuer Benutzer
Beiträge
3
Hi, ich hoffe ihr könnt mir weiterhelfen. Ich habe eine Tabelle, wo die Menge einer Position in 2 Spalten aufgeteilt ist. In der einen Spalten der Betrag der Menge, in der anderen das Vorzeichen. Zur Summenbildung soll die Menge mit dem Preis multipliziert werden, zur besseren Vorstellung als Pseudocode SELECT (POS.PREIS*(POS.PLUSMINUS ||POS.MENGE)) AS POS_SUM

Irgendwie stehe ich leider auf dem Schlauch, ich finde keinen einfachen/eleganten Ansatz. Ich kann mit CASE das Vorzeichen abfragen und x -1 rechnen, aber geht das nicht auch einfacher?

MENGE_VORZEICHENMENGE_BETRAGPREIS
+10.5
-21
+35

Danke & viele Grüße ✌️
 
Werbung:
Also:
Wofür die Spalte "Menge_Vorzeichen"? sag doch einfach bei "Menge_Betrag" eine negative oder positive Zahl an ;)

das ganze sieht bei mir so aus:
Code:
create table test(menge integer, preis numeric);
insert into test(menge, preis) values (1, '0.5');
insert into test(menge, preis) values (2, '1');
insert into test(menge, preis) values (3, '5');

der select (wenn ich alles richtig begriffen habe) würde dann so aussehen:
Code:
select menge*preis from test;

Ergebnis:
Code:
0.5
2
15

EDIT:
Beispiel mit negativer Menge:
Code:
insert into test(menge, preis) values (-7, '0.75');

Ergebnis von der selben Abfrage nur mit dem Wert zusätzlich:
Code:
0.5
2
15
-5.25
 
Hi @Kampfgummibaerlie das ging aber fix mit der Antwort, Danke!

Sorry, hätte ich dazu schreiben müssen: das ist eine vorgegebene Datenbank, auf die ich nur lesend mittels SELECT über einen Query-Editor Zugriff habe. Ich kann leider weder Struktur, noch Inhalte ändern.

Ansonsten wäre deine Antwort genau das, wie ich es gemacht hätte.

BTW: gibt die Separierung des Vorzeichens einen markanten Vorteil? Der Entwickler hatte ja sicher einen guten Grund dafür.

Viele Grüße
 
Leider funktioniert das nicht, da erscheint "ORA-01722: invalid number" an der Stelle der Verkettung

Code:
to_number(vorzeichen|<*>|menge)*preis

Ich kann leider nicht sehen, was für ein Datentyp für die Spalte Vorzeichen definiert ist.
 
Die Spalte "vorzeichen" muss ja als VARCHAR definiert sein. Ich vermute mal, da steht noch irgendwas anderes drin, was die Konvertierung verhindert. Aber vielleicht funktioniert es so:
Code:
select (case 
         when vorzeichen = '-' then -1
         else 1
       end * menge) * preis
from ...
Damit wird die Spalte MENGE mit -1 oder 1 multipliziert und somit entfällt eine Konvertierung Zahl -> String -> Zahl und umgeht potentielle falsche Zeichen in der Spalte VORZEICHEN.

Ich kann leider nicht sehen, was für ein Datentyp für die Spalte Vorzeichen definiert ist.
Code:
select column_name, data_type, data_length
from all_tab_columns
where table_name = 'POS' --<< hier den richtigen Tabellennamen einsetzen
 
Da nur ein Minus in Vorzeichen wirklich eine Auswirkung hat kannst du auch mit CASE MENGE_VORZEICHEN = '-' THEN arbeiten. Ich bin allerdings nicht bewandert in Oracle, CASE müsste es da aber geben.
 
Werbung:
Naja, man muss vermeiden, dass ein Null Value (oder anderes, nicht zahlentaugliches Zeichen) direkt oder durch konkatenierung bei to_number landet.
 
Zurück
Oben