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

一个比较难的sql查询,请高手指教

楼主leboo(良言)2005-06-03 13:43:16 在 MS-SQL Server / 基础类 提问

有如下一个表,有如下字段(其它字段略)  
   
  活动名称 参加人  
  聚会 tom  
  聚会 ami  
  聚会 jan  
  聚会 haa  
  生日 tom  
  生日 jan  
  生日 jerry  
  开会 tom  
  开会 ami  
  开会 john  
   
   
  现在要用查询出3次活动都参加的人,这个sql怎么写,请高手指教。  
  注:不一定是3次活动,可能是有很多次,要求可以根据聚会名称来进行查询,比如说选择‘聚会’和‘生日’查询,即要查询出同时参加‘聚会’和‘生日’的人名单。 问题点数:100、回复次数:9Top

1 楼yjdn(人形机器)回复于 2005-06-03 13:47:27 得分 0

--不一定3次?那选出三次以上的可以没有?  
  select   参加人     from   表名   group   by   参加人   having   count(活动名称)>=3Top

2 楼yjdn(人形机器)回复于 2005-06-03 13:50:55 得分 40

做成一个存储过程吧,  
  select   参加人     from   表名   where   活动名称='聚会'   or   活动名称='生日'   group   by   参加人   having   count(活动名称)=活动数目  
   
   
  --这个条件参数应该是在程序中完成吧?你在程序中再生成一个活动数目就可以了Top

3 楼hsj20041004(光芒)回复于 2005-06-03 13:54:43 得分 0

select   参加人,活动名称     from   表名   where   活动名称   in   ('yourname','yourname')   group   by   参加人   having   count(*)>=3   order   by   count(*)   desc    
  Top

4 楼hsj20041004(光芒)回复于 2005-06-03 13:56:26 得分 30

select   参加人     from   表名   where   活动名称   in   ('yourname','yourname')   group   by   参加人   having   count(*)>=3   order   by   count(*)   descTop

5 楼yjdn(人形机器)回复于 2005-06-03 13:56:52 得分 0

或者写成过程  
  create   proc   proc_test  
  @tj   varchar(8000),  
  @num   int  
  as  
  declare   @sql   varchar(8000)  
  set   @sql='select   参加人   from   表名   where   '+@tj+'   group   by   参加人    
            having   count(活动名称)='+@num  
  exec(@sql)  
   
  --这样的话,输入参数是类似“活动名称='聚会'   or   活动名称='生日'”的条件,你要几个条件都可以,再加上一个活动数目就可以了,  
  这些在程序中生成应该没有问题吧Top

6 楼xluzhong(Ralph)回复于 2005-06-03 13:57:54 得分 15

select   参加人  
  from  
  (select   distinct   *   from   tablename)t  
  group   by   参加人  
  having   count(*)=(select   count(distinct   活动名称)   from   tablename)Top

7 楼yjdn(人形机器)回复于 2005-06-03 13:59:03 得分 0

--在存在过程中,也可以得到活动数目,不过,我觉得这样的会降低速度,还是在程序中实现好点Top

8 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-03 13:59:52 得分 15

create   table   #t(活动名称   varchar(10),参加人   varchar(10))  
  insert   into   #t   select   '聚会','tom'  
  insert   into   #t   select   '聚会','ami'  
  insert   into   #t   select   '聚会','jan'  
  insert   into   #t   select   '聚会','haa'  
  insert   into   #t   select   '生日','tom'  
  insert   into   #t   select   '生日','jan'  
  insert   into   #t   select   '生日','jerry'  
  insert   into   #t   select   '开会','tom'  
  insert   into   #t   select   '开会','ami'  
  insert   into   #t   select   '开会','john'  
   
  select  
          参加人  
  from  
          #t  
  group   by  
          参加人  
  having   count(*)   =   (select   count(distinct   活动名称)   from   #t)Top

9 楼leboo(良言)回复于 2005-06-03 20:12:02 得分 0

多谢各位,问题已经解决。   yjdn(无尽天空)和   hsj20041004(光芒)的方法我都试了,都可以。Top

相关问题

  • sql语句查询问题!谢谢!! 急用!真的!比较难!!!
  • 又遇Sql查询难题!
  • 比较两句SQL 查询语句
  • 请教SQL查询效率比较
  • 比较疑难的一个SQl查询语句,希望大家帮忙
  • 一个超难的sql查询
  • 一个SQL查询,感觉有点难
  • SQL查询语句优化,[超难]
  • 一个较难的SQL查询
  • SQL查询难题(高手快来啊)

关键词

  • 聚会
  • 查询
  • tom
  • sql
  • 活动名称
  • 生日
  • yourname
  • 参加人
  • 开会
  • 程序

得分解答快速导航

  • 帖主:leboo
  • yjdn
  • hsj20041004
  • xluzhong
  • libin_ftsafe

相关链接

  • SQL Server类图书

广告也精彩

反馈

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