2017-09-25 1 views
-1

I 5 Spalten in der Tabelle haben:IF/CASE + mathematische Operation - Mysql

   - id/a /b /operation/ c 

wo zum Beispiel: 1/2/3/+/5

Was mein Ziel ist, Überprüfen Sie, ob die Operation (+/-/* /%) korrekt ist mit der Formel (a (Operation) b = c) und zeigen Sie nur die Datensätze an, für die die Formel wahr ist.

Ehrlich gesagt habe ich das zu lösen versucht, aber leider weiß ich wirklich nicht, wie man ...

Natürlich habe ich mit dem Betrieb Spalte starten:

(IF(operation = '+', a+b, IF(operation = '-', a-b, IF(operation = '*', a*b, IF(operation = '/',a/b, '')))) 

Soll ich mischen vielleicht mit IF CASE? Was mehr ist, Null exepction muss

Antwort

2

Verwenden case hinzugefügt:

select (c = (case when operation = '+' then a + b 
        when operation = '-' then a - b 
        when operation = '/' then a/nullif(b, 0) 
        . . . 
      end) 
     ) as expected_equals_actual 
+0

SELECT id, a, b, Betrieb, (SELECT CASE , wenn der Betrieb = '+' dann CAST ((a + b) als BINARY) wenn operation = '-' dann CAST ((a - b) als BINARY) wenn operation = '/' dann CAST ((a/b) als BINARY) wenn operation = '*' dann CAST ((a * b) als BINARY) end) als c – Kermi

+0

Auch wenn es falsch ist, wird es immer noch angezeigt und ich habe ein Problem mit Null. 3/0 sollte Null nicht null sein – Kermi

+0

@Kermi Division durch Null wird nicht Null zurückgeben. Es wird ein Fehler ausgegeben, der 'NULL' darstellt. – tadman

Verwandte Themen