Question 'IF' dans l'instruction 'SELECT' - choisissez la valeur de sortie basée sur les valeurs de la colonne


SELECT id, amount FROM report

j'ai besoin amount être amount si report.type='P' et -amount si report.type='N'. Comment ajouter ceci à la requête ci-dessus?


588
2018-05-10 13:53


origine


Réponses:


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

Voir http://dev.mysql.com/doc/refman/5.0/fr/control-flow-functions.html.

En outre, vous pouvez gérer lorsque la condition est nulle. Dans le cas d'un montant nul:

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

La partie IFNULL(amount,0) veux dire lorsque le montant n'est pas nul return le montant retourné 0.


901
2018-05-10 13:58



Utiliser un case déclaration:

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



Le plus simple est d'utiliser un SI(). Oui Mysql vous permet de faire une logique conditionnelle. La fonction IF prend 3 paramètres: CONDITION, TRUE OUTCOME, FALSE OUTCOME.

Donc, la logique est

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

Vous pouvez ignorer abs () si tous les non sont + ve seulement


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



Essayons celui-ci:

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

3
2017-11-11 09:12