我有一张这样的表:
+------+
|Status|
+------+
|2 |
+------+
|1 |
+------+
|2 |
+------+
|2 |
+------+
|2 |
+------+
在此表中,名为status的列具有一个不同的值,因此它应该返回一个列状态,其中一个值为PENDING,如果所有状态值都为2,那么它应返回单列状态,其中一个值为COMPLETED < / p>
输出应该如下所示
+------+
|Status |
+------ +
|Pending|
+-------+
答案 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');