对具有相同ID但值不同的两行进行CASE

时间:2018-09-28 07:38:53

标签: mysql sql

我有下表。我需要的是一个SQL查询,该查询将分析具有相同ID的两个/多个行,并且:(1)CASE'Result'对于两行都是相同的,打印'Passed'; (2)两行的情况“结果”都不相同,请打印“失败”。

ID  Result  
73  2000    Passed
73  2000    
43  2000    Failed
43  1003    

enter image description here

有可能吗?

3 个答案:

答案 0 :(得分:1)

一个选项使用EXISTS

SELECT DISTINCT ID
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t1.ID = t2.ID AND t2.Result <> t1.Result);

另一个选项使用聚合:

SELECT ID
FROM yourTable
GROUP BY ID
HAVING COUNT(DISTINCT Result) = 1;

Demo

答案 1 :(得分:1)

如果您希望每个ID一行,请使用group by

select id,
       (case when min(result) = max(result) then 'Passed'
             else 'Failed'
        end) as flag
from t
group by id;

如果要在原始表的 all 行上使用该值,则很简单:

select id,
       (case when not exists (select 1
                              from t t2
                              where t2.result) = t.result
                             )
             then 'Passed' else 'Failed'
        end) as flag
from t
group by id;

但是,将结果放在 one 行上是有问题的。无法区分行,因此更具挑战性(并非不可能,但我怀疑上述方法之一可以解决您的实际问题)。

答案 2 :(得分:0)

尝试以下方法:

select id, case when count (distinct result)=1 then 'Passed' else 'Failed' end
group by id