WEB开发网
开发学院数据库MSSQL Server SQL按type计算行数的三种方法 阅读

SQL按type计算行数的三种方法

 2008-10-24 10:07:13 来源:WEB开发网   
核心提示:我有一个叫做TestTable的表,它有一个字段,SQL按type计算行数的三种方法,Type Varchar(5),表中的数据如下: TypeABACAB所以在这个表中这个单独的字段里有六条记录,因此这个表没有主键,有人会说它因此不是一个“真正”的表,请帮助我写一个查询获得下面的结果:A B

我有一个叫做TestTable的表,它有一个字段,Type Varchar(5)。表中的数据如下:

Type

A

B

A

C

A

B

所以在这个表中这个单独的字段里有六条记录。请帮助我写一个查询获得下面的结果:

A B C

3 2 1

换句话说我想获得单独的Type字段数据和它们的数量。

Rudy Limeback:

有三种方式可以实现它:  

select ( select count(*)
  from TestTable
  where Type = 'A' ) as A
  , ( select count(*)
  from TestTable
  where Type = 'B' ) as B
  , ( select count(*)
  from TestTable
  where Type = 'C' ) as C

在有些数据库里这第一个查询确实可以运行,但是它不是标准的SQL,因为它缺少了FROM条件。添加上双重FROM(或者其他任何一行的表)。  

select sum( case when Type = 'A'
  then 1 else 0 end ) as A
  , sum( case when Type = 'B'
  then 1 else 0 end ) as B
  , sum( case when Type = 'C'
  then 1 else 0 end ) as C
  from TestTable

第二个查询确实可以得出你想要的,但是就像第一个查询一样,如果你发觉需要增加另一个Type,维护起来很麻烦。 

select Type
  , count(*)
  from TestTable
  group
  by Type

第三个查询是最好的。不只是它一看就很容易理解,而且当添加新的Types时它还不需要维护。此外,它认为这个表达式不应该在数据库层处理。

顺便,因为你的表只有一列,而它具有重复的值,这个列不能作为主键,因此这个表没有主键。有人会说它因此不是一个“真正”的表,是个包。

Tags:SQL type 计算

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接