2017-10-13 102 views
0
I have a result set such as: 

    Code  No 
    1   * 
    1   - 
    1   4 
    1   
    1 

現在我基本上想要一個具有2列的查詢,一個總數的計數和一個沒有數字的計數。GROUP BY與COUNT條件

Code  No_Number Total 
    1   4    5 

林假設這需要由一羣和計數,但我怎麼可以做2個不同的計數這樣的查詢?

這是我有這麼遠,但我堅持一點用它

SELECT CODE,NO 
Sum(Case when No IN ('*', '-', '') then 1 else 0 end) as Count 

回答

7

其餘的我想你基本上只需要GROUP BY

SELECT CODE, 
     SUM(Case when No IN ('*', '-', '') then 1 else 0 end) as Count, 
     COUNT(*) as total 
FROM t 
GROUP BY CODE; 
0

好了,這花了時刻:-),但是在這裏......我用CASE語句來創建和填充No_Number列;如果原始表值是一個數字,則數據庫爲原始表中的行賦值1,或者如果不是,則賦予它一個NULL並將其從COUNT中丟棄。然後,當它使計數它只是承認其最初的數字和其他一切無視值..

如果結果集是在一個表或臨時表:

SELECT Code, 
     COUNT(CASE WHEN [No] NOT LIKE '[0-9]' THEN 1 ELSE NULL END) AS No_Number, 
     COUNT(Code) AS Total 
FROM <tablename> 
GROUP BY Code 

如果結果集是您可以使用CTE(公用表表達式)來獲得所需結果,或者可以在早期查詢中包含此代碼的一部分。