SQL COUNT - 具有两个具有不同WHERE子句的COUNT列的输出表

Spa*_*ags 4 sql oracle count oracle-apex

我需要在Oracle APEX中生成一个类似于以下示例的报告:

 PROJECT     OPEN_ISSUE_COUNT     CLOSED_ISSUE_COUNT
 W-1         3                    1
 X-2         1                    2
 Y-3         5                    3
 Z-4         2                    1
Run Code Online (Sandbox Code Playgroud)

OPEN_ISSUE_COUNTCLOSED_ISSUE_COUNT由生成SQL COUNT的语句.被查询的表看起来像这样:

 ISSUE_#     ISSUE_STATUS     ASSOCIATED_PROJECT
 1A          OPEN             W-1
 1B          OPEN             W-1
 1C          OPEN             W-1
 2A          CLOSED           W-1
 2B          OPEN             X-2
 2C          CLOSED           X-2
 3A          CLOSED           X-2 
 etc...
Run Code Online (Sandbox Code Playgroud)

因此,在一个查询我需要计数OPEN_ISSUE_COUNTCLOSED_ISSUE_COUNT在那里ISSUS_STATUS = 'OPEN'ISSUS_STATUS = 'CLOSED'分别GROUP BY ASSOCIATED_PROJECT.

那有意义吗?显然,我可以轻松地针对这两种状态中的一种进行此操作,但是无法为我在此描述的内容提出任何可行的解决方案.我在这里和其他地方看过一些东西并没有看到类似的东西.让我知道你们的想法.谢谢!

小智 8

由于count()只计算非空值,这应该工作:

select associated_project as project,
count(case when issue_status='OPEN' then 1 else null end) as open_issue_count,
count(case when issue_status='CLOSED' then 1 else null end) as closed_issue_count
from table
group by associated_project;
Run Code Online (Sandbox Code Playgroud)

当然,这假设唯一有效的值issue_status'OPEN'AND 'CLOSED'.如果不是这种情况 - 并且如果您希望计算其他状态 - 则相应地调整查询.

  • @Sebas - 这个'技巧'也允许你做一些事情,比如`COUNT(DISTINCT CASE WHEN x THEN some_id ELSE NULL END)`.这是一个可爱的小工具. (4认同)
  • 顺便说一下,不需要`else null`部分,因为如果不提供null,则null是默认值 (3认同)