SQL Query与CASE和group by

时间:2012-02-01 19:06:47

标签: sql oracle

我有一个功能表,其中每个功能都由其ID(DB列)和Bugs表标识,其中每个功能都有一对多的关系,并带有错误表。

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;

我的查询总是提供失败的功能但未通过,如何修改我的查询以返回两者?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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