【问题标题】:SQL Query with CASE and group by带有 CASE 和分组依据的 SQL 查询
【发布时间】:2012-02-02 03:17:45
【问题描述】:

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

Feature Table has columns
id Description

Bugs Table has columns

ID Feature_ID Status

如果状态为 0 或 1,我会将 bug 视为已打开,如果 Status 为 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;

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

【问题讨论】:

  • 这根本没有意义 B.ID 总是大于 > 0 所以所有元组都将失败。
  • 是什么让记录处于失败状态或通过状态 - 你没有提到这一点。
  • @JonH 我已经提到我的查询错误并且总是返回失败状态。它被外部客户端标记为通过或失败

标签: sql oracle


【解决方案1】:

听起来你想要类似的东西

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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多