如果没有可用行,则返回0

时间:2016-01-26 03:18:47

标签: sql

我有以下查询

select rowid,ConnectionStatus,count(*) Count
from NAIL_CONN
where name like "WorkflowStatusHandlingMDBBeanEJB%"
group by ConnectionStatus

返回值

rowed  ConnectionStatus Count

8      Connected    1
14      re-connecting   3

从这个查询中,ConnectionStatus返回的可能性是“重新连接,断开连接”和“已连接”

我希望它在没有符合上述条件的行时返回0

示例:

rowed  ConnectionStatus Count

8      Connected    1
14      re-connecting   3
10     disconnected     0

请忽略划线,因为它无关紧要。

2 个答案:

答案 0 :(得分:0)

您需要获取查询中的所有行,但只计算匹配的行。

select rowid,ConnectionStatus,
count(case when name like "WorkflowStatusHandlingMDBBeanEJB%" then 1 end) Count
from NAIL_CONN
group by ConnectionStatus

另一个更有效的机制是将外连接与原始查询保持一个不同的ConnectionStatus列表。

答案 1 :(得分:0)

你必须为此创建一个映射表,rowid是什么?如果它对你没有任何意义,就不要选择它。请标记您正在使用的dbms

通过create table:

  create table ConnectionStatus (rowid int,ConnectionStatus varchar(20))
  insert into ConnectionStatus(rowid,ConnectionStatus)values(8,'Connected');
  insert into ConnectionStatus(rowid,ConnectionStatus)values(14,'re-connecting');
  insert into ConnectionStatus(rowid,ConnectionStatus)values(10,'disconnected ');

然后只是离开了加入和情况何时可以

    select nail.rowid,nail.ConnectionStatus,
           case when nail.rowid is null then 0 else nail.Count end as Count
    from ConnectionStatus conn
    left join 
      (select rowid,ConnectionStatus,count(1) Count
      from NAIL_CONN
      where name like "WorkflowStatusHandlingMDBBeanEJB%"
      group by ConnectionStatus) nail
    on nail.ConnectionStatus= conn.ConnectionStatus