«IF» в выражении «SELECT» - выберите выходное значение на основе значений столбца - PullRequest
656 голосов
/ 10 мая 2011
SELECT id, amount FROM report

Мне нужно amount, чтобы быть amount, если report.type='P' и -amount, если report.type='N'.Как мне добавить это к вышеуказанному запросу?

Ответы [ 8 ]

986 голосов
/ 10 мая 2011
SELECT id, 
       IF(type = 'P', amount, amount * -1) as amount
FROM report

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

Кроме того, вы можете обрабатывать, когда условие равно нулю. В случае нулевой суммы:

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

Деталь IFNULL(amount,0) означает , когда сумма не равна нулю. Возврат суммы, иначе возврат 0 .

241 голосов
/ 10 мая 2011

Используйте оператор case:

select id,
    case report.type
        when 'P' then amount
        when 'N' then -amount
    end as amount
from
    `report`
93 голосов
/ 08 ноября 2012
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;
37 голосов
/ 21 июня 2012
select 
  id,
  case 
    when report_type = 'P' 
    then amount 
    when report_type = 'N' 
    then -amount 
    else null 
  end
from table
14 голосов
/ 25 января 2015

Самый простой способ - использовать IF () . Да, Mysql позволяет вам делать условную логику. ЕСЛИ функция принимает 3 параметра СОСТОЯНИЕ, ИСТИННЫЙ РЕЗУЛЬТАТ, ЛОЖНЫЙ ВЫХОД.

Итак, логика

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

Вы можете пропустить abs (), если все нет - только + ve

11 голосов
/ 11 мая 2013
SELECT id, amount
FROM report
WHERE type='P'

UNION

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

ORDER BY id;
4 голосов
/ 11 ноября 2016

Давайте попробуем это:

 SELECT
    id , IF(report.type = 'p', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount
 FROM report
2 голосов
/ 10 ноября 2016

Вы можете попробовать это также

 Select id , IF(type=='p', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount from table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...