2011-08-15 84 views
2

我正在使用select count distinct來計算列中的記錄數。不過,我只想計算的記錄,其中不同列的值是1。計算不同列的值爲1的列的行數

所以,我的表看起來有點像這樣:

名稱------類型
ABC- -------- 1
def ---------- 2
ghi ---------- 2
jkl ---------- -1
mno -------- 1

我想只查詢co無abc,jkl和mno,因此返回'3'。

我不能用CASE函數做到這一點,因爲這似乎只適用於同一列中的條件。

編輯:對不起,我應該添加,我想作出一個查詢,這兩個類型的計數。 所以結果應該看起來更像: 1 --- 3 2 --- 2

回答

2
SELECT COUNT(*) 
    FROM dbo.[table name] 
    WHERE [type] = 1; 

如果你想按類型返回計數:

SELECT [type], COUNT(*) 
    FROM dbo.[table name] 
    GROUP BY [type] 
    ORDER BY [type]; 

您應該避免使用關鍵字,比如類型列名 - 你能避免很多方括號如果您使用更具體的非保留字。

1
;WITH MyTable (Name, [Type]) AS 
(
SELECT 'abc', 1 
UNION 
SELECT 'def', 2 
UNION 
SELECT 'ghi', 2 
UNION 
SELECT 'jkl', 1 
UNION 
SELECT 'mno', 1 
) 
SELECT COUNT(DISTINCT Name) 
FROM MyTable 
WHERE [Type] = 1 
+3

一個小技巧:使用前加分號:) – sll

+0

@sllev:你說得對,這是最好的總是使用。固定 –

1

SELECT COUNT(1)從TBL其中type = 1

2

我想你會想(假設你不會想算(「ABC」,1)如果兩次是在表中兩次):

select count(distinct name) 
    from mytable 
where type = 1 

編輯:爲讓所有類型

select type, count(distinct name) 
    from mytable 
group by type 
order by type 
+0

感謝您的快速回答,但我忘了提及,我想做一個查詢,這兩種類型。所以結果應該看起來更像:1 --- 3 2 --- 2 – Sander

+0

啊對,是的。這工作得很好。謝謝! – Sander