6

我有一张带type字段的桌子。

如何在查询中检查此字段:

type如果== 'a'我想检查一下

然后bes= amount, bed= '-'

否则bed= amount, bes= '-'

bes 和 bed 在我的表中并不存在,但数量是 (int)

这是我的尝试:

SELECT billing.*,
    CASE billing.type WHEN 'A' THEN billing.amount AS bes, '-' AS bed ELSE billing.amount AS bed, '-' AS bes END
    FROM billing

...我的搜索没有用

任何解决方案...

4

5 回答 5

8

您可以为每一行创建条件,MySQL支持内联 IF语句。

SELECT billing.*,
       IF(billing.type = 'A', billing.amount, '-') AS bes,
       IF(billing.type = 'A', '-', billing.amount) AS bed
FROM   billing
于 2013-03-11T13:32:06.330 回答
4

为此,您需要两个 case 语句:

SELECT billing.*,
  CASE billing.type WHEN 'A' THEN billing.amount ELSE '-' AS bes END,
  CASE billing.type WHEN 'A' THEN '-' ELSE billing.amount AS bed END
FROM billing
于 2013-03-11T13:30:08.350 回答
3

一个CASE-WHEN-THEN-ELSE只能有一个返回值...

这应该可以解决问题:

SELECT billing.*,
CASE billing.type WHEN 'A' THEN billing.amount ELSE '-' END AS bes,
CASE billing.type WHEN 'A' THEN '-' ELSE billing.amount END AS bed 
FROM billing
于 2013-03-11T13:29:33.327 回答
3
SELECT billing.*,
    CASE  WHEN billing.type =  'A' THEN billing.amount ELSE 0 END AS bes,
    CASE  WHEN billing.type <> 'A' THEN billing.amount ELSE 0 END AS bed
FROM billing
于 2013-03-11T13:31:15.040 回答
2

根据您的 MySQL 版本,您可以使用IF或CASE CASE (1)、CASE (2)的两种不同语法之一。

SELECT *,
  (IF type = 'A' THEN amount ELSE '-' END IF) bes,
  (IF type = 'A' THEN '-' ELSE amount END IF) bed
FROM billing
于 2013-03-11T13:55:14.513 回答