关于mysql:’SELECT’语句中的’IF’ – 根据列值选择输出值

'IF' in 'SELECT' statement - choose output value based on column values

1
SELECT id, amount FROM report

如果report.type='P',我需要amount amount,如果report.type='N',我需要-amount。 如何将其添加到上述查询中?


1
2
3
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。

此外,您可以在条件为null时进行处理。 在空金额的情况下:

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

部分IFNULL(amount,0)表示当金额不为空时返回金额,否则返回0。


使用case语句:

1
2
3
4
5
6
7
select id,
    case report.type
        when 'P' then amount
        when 'N' then -amount
    end as amount
from
    `report`


1
2
3
4
5
6
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;

1
2
3
4
5
6
7
8
9
10
select
  id,
  case
    when report_type = 'P'
    then amount
    when report_type = 'N'
    then -amount
    else null
  end
from table

最简单的方法是使用IF()。 是的Mysql允许你做条件逻辑。 IF函数需要3个参数条件,真实的结果,错误的结果。

所以逻辑是

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

SQL

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

如果所有不是+ ve,你可以跳过abs()


1
2
3
4
5
6
7
8
9
10
11
SELECT id, amount
FROM report
WHERE type='P'

UNION

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

ORDER BY id;


我们来试试这个:

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


你也可以尝试一下

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