2016-01-26 48 views
0

我有以下查詢返回0,如果沒有可用的行

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 

請忽略rowed,因爲它並不重要。

+0

雙引號的標識符,例如' 「ConnectionStatus」'。對於字符串文字使用單引號,例如' 'WorkflowStatusHandlingMDBBeanEJB%''。 – jarlh

+0

一般的GROUP BY規則說:「如果指定了一個GROUP BY子句,那麼'SELECT'列表中的每個列引用必須標識一個分組列或者是一個set函數的參數。」即在你的情況下,你應該做'GROUP BY rowid,ConnectionStatus'。 – jarlh

回答

0

您需要獲取查詢中的所有行,但只計算匹配的行數。

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

另一種更有效的機制是將ConnectionStatus的獨特列表與原始查詢留在外部聯接。

+0

是的,並確保你可以得到所有的ConnectionStatus我建議創建一個暗淡的表來存儲它。 –

+0

作品非常漂亮,非常感謝你 –

0

你必須爲此創建一個映射表,什麼是rowid?如果它對你沒有任何意義,就不要選擇它。並請註明您使用

通過創建表的DBMS:

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 
+0

嗨,謝謝你的回答。我不能在這裏創建表格,因爲我從中獲取數據的應用程序只有只讀訪問權限。我只想讀取表格。 –

相關問題