Sql vorzeichen ermitteln

lemurdroid788

Benutzer
Beiträge
10
Hi, ich würde gerne die Differenz zwischen 2 werten ermitteln.

Ich habe folgende Tabelle:
value1 value2 Correct Difference1 Difference2
1200 122 -1078 1078
5837 6748 911 -911
3455 3677 0 -222
2400 2400 0 0

Difference1 = value1 - value2

Jetzt will ich in Difference2 die korrekturen miteinbinden. Demnach sollen Difference1 und Correct verrechnet werden.
Dazu bräuchte ich etwas um die vorzeichen zubestimmen in Correct, da ja mal - mal + werte drin stehen.

Falls man es jetzt nicht versteht, Difference2 sollte so ausschauen:
Difference2
0
0
-222
0

Oder hat da jemand eine andere Idee, dies zu lösen?
 
Werbung:
Du suchst CASE.

Beispiel:
Code:
SELECT value1,
value2,
( CASE WHEN value1 IS NULL OR value2 IS NULL THEN NULL WHEN value1 - value2 < 0 THEN value1 - value2 ELSE 0 END ) AS ergebnis_negativ,
...
FROM tabelle
Du kannst beliebige Berechnungen mit beliebigen Spalten zu beliebigen Bedingungen anstellen.
 
Werbung:
im übrigen hast Du bei diesem Tabellendesign unsinnige Redundanz in den Daten, Difference1 und Difference2 sind aus den ersten 3 Spalten jederzeit berechenbar.

Code:
postgres=# select * from lemurdroid788 ;
 val1 | val2 | correct | diff1 | diff2 
------+------+---------+-------+-------
 1200 |  122 |   -1078 |  1078 |      
 5837 | 6748 |     911 |  -911 |      
 3455 | 3677 |       0 |  -222 |      
 2400 | 2400 |       0 |     0 |      
(4 rows)

postgres=# alter table lemurdroid788 drop column diff1;
ALTER TABLE
postgres=# alter table lemurdroid788 drop column diff2;
ALTER TABLE

postgres=# select val1, val2, correct, val1-val2 as difference1, val1-val2 + correct as difference2 from lemurdroid788 ;
 val1 | val2 | correct | difference1 | difference2 
------+------+---------+-------------+-------------
 1200 |  122 |   -1078 |        1078 |           0
 5837 | 6748 |     911 |        -911 |           0
 3455 | 3677 |       0 |        -222 |        -222
 2400 | 2400 |       0 |           0 |           0
(4 rows)

Diese Spalten zu entfernen spart nicht nur Speicherplatz, sondern macht das auch gegen Dateninkonsistenzen robuster.
 
Zurück
Oben