Pregunta 'IF' en la instrucción 'SELECT' - elija el valor de salida en función de los valores de la columna


SELECT id, amount FROM report

Necesito amount ser amount Si report.type='P' y -amount Si report.type='N'. ¿Cómo agrego esto a la consulta anterior?


588
2018-05-10 13:53


origen


Respuestas:


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

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

Además, puede 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) medio cuando la cantidad no es nula, devuelve la cantidad que devuelve 0.


901
2018-05-10 13:58



Usar una case declaración:

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

221
2018-05-10 13:55



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;

90
2017-11-08 06:27



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

32
2018-06-21 09:24



La forma más simple es usar un SI(). Sí Mysql le permite hacer una lógica condicional. La función IF toma 3 parámetros CONDICIÓN, RESULTADO VERDADERO, RESULTADO FALSO.

Entonces 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


13
2018-01-25 02:57



SELECT id, amount
FROM report
WHERE type='P'

UNION

SELECT id, (amount * -1) AS amount
FROM report
WHERE type = 'N'

ORDER BY id;

11
2018-05-11 13:59



Probemos este:

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

3
2017-11-11 09:12



Puedes probar esto también

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

2
2017-11-10 06:17