2016-11-24 89 views
2

我在我的表中有像下面的数据。 (我的表格中有很多其他列)如何获得一个列值取决于另一个

project_id | done_ratio 
1510 ------------ 100 
1510 ------------ 100 
1510 ------------ 100 
1511 ------------ 80 
1511 ------------ 90 
1511 ------------ 0 
1512 ------------ 0 
1512 ------------ 0 

我想写的查询是获取状态取决于done_ratio如下。对于PROJECT_ID 1510
状态完成因为全部完成比率为100
为PROJECT_ID 1511状态工作因为全部完成比率不是100和0
为PROJECT_ID 1512状态为not_start因为全部完成比例为0.
任何人都可以解释我吗?

回答

4
select project_id, 
     case when avg(done_ratio) = 100 then 'done' 
      when avg(done_ratio) > 0 then 'working' 
      else 'not_start' 
     end as status 
from your_table 
group by project_id 
+0

谢谢您的回答。但我想要做的是获取状态取决于具体项目的所有done_ratio。举个例子,一个有(100,90,20)done_ratio的项目,即使有100个,也会显示工作没有完成。 抱歉我的英文不好。 –

+1

然后用'avg()'代替 –

+0

是的,我明白了。 avg()解决了这个问题。非常感谢@juergen d。 –

0

可以使用CASE statement为:

SELECT 
CASE WHEN done_ratio == 100 THEN 'done' 
    WHEN done_ratio == 0 THEN 'not_start' 
    ELSE 'working' 
FROM tbl 
相关问题