我有以下查询
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
请忽略划线,因为它无关紧要。
答案 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