Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

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

时 间:2008-03-31 18:35:46
作 者:Rudy Limeback,   ID:92  城市:北京
摘 要:SQL按type计算行数的三种方法
正 文:

我有一个叫做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时它还不需要维护。此外,它认为这个表达式不应该在数据库层处理。

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



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助