CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

问个很简单SQL语句:

楼主BearRui(孤熊 | 带你去看海!)2005-06-02 22:53:18 在 MS-SQL Server / 基础类 提问

table1  
      name  
        a  
        a  
        b  
        b  
        b  
        c  
        c  
   
  想统计每1个name出现的次数,显示结果为:  
  a   2  
  b   3  
  c   2  
   
  如果要显示结果是  
  a   2   b   3   c   2  
  那SQL语句又该怎么写。  
   
  谢谢!!! 问题点数:50、回复次数:9Top

1 楼tuwicn(木狼)回复于 2005-06-02 23:07:38 得分 20

select   name,count(*)   from   table1   group   by   nameTop

2 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-02 23:10:27 得分 10

想统计每1个name出现的次数,显示结果为:  
  a   2  
  b   3  
  c   2  
   
  ----------------  
  Select   name,Count(*)   As   Count   from   table1   Group   By   name   Order   By   nameTop

3 楼yjdn(人形机器)回复于 2005-06-02 23:11:59 得分 20

declare   @sql   varchar(8000)  
  set   @sql=''  
  select   @sql=@sql+','''+name+''',sum(case   name   when   '''+rtrim(name)+'''   then   1   else   0   end)   as   ['+rtrim(name)+']'    
  from   tb  
  group   by   name  
  set   @sql=Stuff(@sql,1,1,'')  
  exec('select   '+@sql+'   from   tb   ')  
   
  --结果  
  a 2 b 3 c 2  
  Top

4 楼yjdn(人形机器)回复于 2005-06-02 23:14:57 得分 0

--改成你的表名后:  
  declare   @sql   varchar(8000)  
  set   @sql=''  
  select   @sql=@sql+','''+name+''',sum(case   name   when   '''+rtrim(name)+'''   then   1   else   0   end)   as   ['+rtrim(name)+']'    
  from   table1  
  group   by   name  
  set   @sql=Stuff(@sql,1,1,'')  
  exec('select   '+@sql+'   from   table1   ')Top

5 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-02 23:16:22 得分 0

 
  如果要显示结果是  
  a   2   b   3   c   2  
  那SQL语句又该怎么写  
  --------------  
  如果固定只有这三行,可以如下这么写,否则就要用动态SQL语句。  
   
  Select    
  'a'   As   a,    
  SUM(Case   name   When   'a'   Then   1   Else   0   End)   As   acount,  
  'b'   As   b,  
  SUM(Case   name   When   'b'   Then   1   Else   0   End)   As   bcount,  
  'c'   As   c,  
  SUM(Case   name   When   'c'   Then   1   Else   0   End)   As   ccount  
  from    
  table1  
   
  Top

6 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-02 23:17:29 得分 0

嘿,无尽够快。Top

7 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-02 23:24:37 得分 0

--建立测试环境  
  Create   table   TEST(name Varchar(10))  
  --插入数据  
  Insert   TEST   Values('a')  
  Insert   TEST   Values('a')  
  Insert   TEST   Values('b')  
  Insert   TEST   Values('b')  
  Insert   TEST   Values('b')  
  Insert   TEST   Values('c')  
  Insert   TEST   Values('c')  
  GO  
  --测试  
  Declare   @S Varchar(8000)  
  Set   @S='Select   '  
  Select   @S=@S+''''+name+'''   As   '+name+',SUM(Case   name   When   '''+name+'''   Then   1   Else   0   End)   As   '+name+'count,'  
  from   (Select   Distinct   name   from   TEST)   A   Order   By   name  
  Select   @S=Left(@S,Len(@S)-1)+'   from   TEST'  
  EXEC(@S)  
  --删除测试环境  
  Drop   Table   TEST  
  --结果  
  /*  
  a acount b bcount c ccount  
  a 2 b 3 c 2  
  */Top

8 楼yjdn(人形机器)回复于 2005-06-02 23:26:20 得分 0

楼主的name肯定很多名字,毫无疑问,用动态Top

9 楼BearRui(孤熊 | 带你去看海!)回复于 2005-06-03 14:31:16 得分 0

谢谢几位Top

相关问题

  • 简单Sql语句问题?
  • 问一简单SQL语句
  • sql 语句简单问题?
  • SQL语句简单问题
  • 简单sql语句问题!!!
  • 简单sql语句问题!!!
  • 问简单SQL语句
  • sql语句问题~~简单
  • 简单sql语句
  • 问个简单的SQL语句问题

关键词

  • 语句
  • 测试
  • sql
  • rtrim
  • then1else0
  • sum
  • 显示结果
  • insert
  • exec
  • case

得分解答快速导航

  • 帖主:BearRui
  • tuwicn
  • paoluo
  • yjdn

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo