2011-08-15 43 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