计算列的行,其中不同列的值为1

时间:2011-08-15 13:59:38

标签: sql sql-server-2008 count distinct case

我使用select count distinct来计算列中的记录数。但是,我只想计算不同列的值为1的记录。

所以我的表看起来有点像这样:

命名------类型
ABC --------- 1个
高清---------- 2个
GHI ---------- 2
JKL ----------- 1个
MNO -------- 1

我希望查询只计算abc,jkl和mno,从而返回'3'。

我无法使用CASE函数执行此操作,因为这似乎只适用于同一列中的条件。

编辑:对不起,我应该补充一下,我想创建一个计算两种类型的查询。 所以结果看起来应该更像: 1 --- 3 2 --- 2

4 个答案:

答案 0 :(得分:2)

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

如果您想按类型返回计数:

SELECT [type], COUNT(*)
  FROM dbo.[table name]
  GROUP BY [type]
  ORDER BY [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

答案 2 :(得分: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 :(得分:1)

从type = 1

的表中选择count(1)