2012-02-01 97 views
0

我有一个功能表,其中每个功能都由其ID(DB列)和Bugs表标识,其中每个功能与bug表有一对多关系。CASE和组的SQL查询

Feature Table has columns 
id Description 

Bugs Table has columns 

ID Feature_ID Status 

我会考虑的一个错误为已打开,如果它的状态是0或1和封闭的状态,如果是2

我想编写一个查询指示是否为通过了一项功能可以认为是或根据其状态而失败。

select F.ID 
     CASE WHEN count(B.ID) > 0 THEN 'FAIL' 
      ELSE 'PASS' 
     END as FEATURE_STATUS 
from Feature F, 
     Bugs B 
where B.Status in (0,1) 
group by F.ID; 

我的查询总是给人失败的功能,但没有通过,如何修改我的查询返回两者兼而有之?

+0

这是没有意义的B.ID总是大于> 0,所以所有元组将失败。 – JonH 2012-02-01 19:10:15

+0

什么使记录成为失败状态或通过状态 - 您不提这一点。 – JonH 2012-02-01 19:12:51

+0

@JonH我已经提到我的查询是错误的,并且alwyas返回失败状态。它被外部客户端标记为通过或失败 – Poorna 2012-02-01 19:41:32

回答

2

这听起来像你想要的东西像

SELECT f.id, 
     (CASE WHEN open_bugs = 0 
      THEN 'PASS' 
      ELSE 'FAIL' 
     END) feature_status, 
     open_bugs, 
     closed_bugs 
    FROM (SELECT f.id, 
       SUM(CASE WHEN b.status IN (0,1) 
         THEN 1 
         ELSE 0 
        END) open_bugs, 
       SUM(CASE WHEN b.status = 2 
         THEN 1 
         ELSE 0 
        END) closed_bugs 
      FROM feature f 
       JOIN bugs b ON (f.id = b.feature_id) 
     GROUP BY f.id) 
2
SELECT F.ID, 
     CASE WHEN SUM(CASE WHEN B.ID IN (0, 1) THEN 1 ELSE 0 END) > 0 THEN 'Fail' 
      ELSE 'Success' END AS FEATURE_STATUS 
from Feature F 
     JOIN Bugs B ON B.Feature_ID = F.ID  
group by F.ID