example delete databases create mysql sql database

mysql - delete - ''IF'' en la declaración ''SELECT''-elija el valor de salida basado en valores de columna



show databases mysql (8)

SELECT id, amount FROM report

Necesito que la amount sea ​​la amount si report.type=''P'' y la cantidad si report.type=''N'' . ¿Cómo agrego esto a la consulta anterior?


La forma más sencilla es usar un IF() . Sí, Mysql te permite hacer lógica condicional. La función IF toma 3 parámetros CONDITION, TRUE OUTCOME, FALSE OUTCOME.

Así que la lógica es

if report.type = ''p'' amount = amount else amount = -1*amount

SQL

SELECT id, IF(report.type = ''P'', abs(amount), -1*abs(amount)) as amount FROM report

Puede omitir abs () si todos los no son + ve solamente


Probemos este:

SELECT id , IF(report.type = ''p'', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount FROM report


Puedes probar esto también

Select id , IF(type==''p'', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount from table


Use una declaración de case :

select id, case report.type when ''P'' then amount when ''N'' then -amount end as amount from `report`


SELECT CompanyName, CASE WHEN Country IN (''USA'', ''Canada'') THEN ''North America'' WHEN Country = ''Brazil'' THEN ''South America'' ELSE ''Europe'' END AS Continent FROM Suppliers ORDER BY CompanyName;


SELECT id, IF(type = ''P'', amount, amount * -1) as amount FROM report

Consulte http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html .

Además, podría manejar cuando la condición es nula. En el caso de una cantidad nula:

SELECT id, IF(type = ''P'', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount FROM report

La parte IFNULL(amount,0) significa que cuando el importe no es nulo, devuelve el importe; de ​​lo contrario, devuelva 0 .


SELECT id, amount FROM report WHERE type=''P'' UNION SELECT id, (amount * -1) AS amount FROM report WHERE type = ''N'' ORDER BY id;


select id, case when report_type = ''P'' then amount when report_type = ''N'' then -amount else null end from table