如果mysql中的整个列值不相同,则应返回单个列值

时间:2017-06-21 09:01:51

标签: mysql

我有一张这样的表:

+------+
|Status|
+------+
|2     |
+------+
|1     |
+------+
|2     |
+------+
|2     |
+------+
|2     |
+------+

在此表中,名为status的列具有一个不同的值,因此它应该返回一个列状态,其中一个值为PENDING,如果所有状态值都为2,那么它应返回单列状态,其中一个值为COMPLETED < / p>

输出应该如下所示

 +------+
|Status |
+------ +
|Pending|
+-------+

4 个答案:

答案 0 :(得分:2)

检查不同状态的数量(1除外)不大于0:

SELECT CASE WHEN COUNT(*) > 0 THEN 'PENDING' ELSE 'COMPLETED' END AS 'Status' FROM (
    SELECT DISTINCT status FROM yourtable WHERE status != 1
) a;

答案 1 :(得分:0)

SELECT CASE WHEN COUNT(*) >1 THEN 'PENDING' ELSE 'COMPLETED' END  FROM
(
 SELECT Status FROM TABLENAME GROUP BY Status
)Z

尝试以上查询。

希望这会有所帮助。

答案 2 :(得分:0)

由于您已经假设数据集中只有两个可能的值为1&amp; 2,您可以运行以下查询以获得所需的结果。

注意:我假设2s表示已完成的值,1表示待处理值。因此,所有行的总和应该等于'否。行'x 2如果全部完成。否则意味着存在非匹配值(即1)

SELECT
    CASE
        WHEN count(status) * 2 = SUM(status) THEN 'COMPLETED'
        ELSE 'PENDING'
    END AS status
FROM my_table;

答案 3 :(得分:-1)

我猜以下查询可能对您有所帮助: -

select 
CASE WHEN count(*) = 0 then 'COMPLETED'
ELSE 'PENDING' END
from testing where status in ('1');