设为首页 收藏本站
查看: 754|回复: 0

[经验分享] SQL Server 大师级人物 Ken Henderson

[复制链接]

尚未签到

发表于 2018-10-17 11:51:48 | 显示全部楼层 |阅读模式
  借帖子中的问题 http://topic.csdn.net/u/20080916/08/fde28e86-7c54-4d8b-8e27-542f4bbff720.html,回忆SQL   Server 大师级人物 Ken Henderson
  问题如下:
  数据结构
  a b c
  1 x1 11
  2 x2 15
  3 x3 15
  4 x3 14
  5 x2 15
  6 x4 13
  第一条sql,统计列b中有几种情况(题中有x1,x2,x3,x4共四种)
  第二条,查询C最大值的最大连续记录集(查询出2和3行),好像有点难,这条给50分。
  参考大师Ken Henderson 的思路,编写的代码,虽然看上去不容易懂,但确实精彩,精妙绝伦:
set nocount on  declare @temp table (k1 int>  运行结果如下:
  k1 b c1
  -----------
  3 x3 15
  4 x3 15
  8 x6 15
  9 x3 15
  这是一开始我自己写得代码,挺长的,是用了双层的游标:
create   table   tablename(a   int   ,b   varchar(10),c   int)    insert   into   tablename   values(1, 'x1 ',11)    insert   into   tablename   values(2, 'x2 ',15)     insert   into   tablename   values(3, 'x3 ',15   )   insert   into   tablename   values(4, 'x3 ',14   )   insert   into   tablename   values(5, 'x2 ',15   )   insert   into   tablename   values(6, 'x4 ',13   )     insert   into   tablename   values(7, 'x4 ',15   )  insert   into   tablename   values(8, 'x6 ',15   )   insert   into   tablename   values(9, 'x4 ',15   )     declare   @temp_max   table(a   int   ,b   varchar(10),c   int)  declare   @temp   table(a   int   ,b   varchar(10),c   int)     declare   @maxcount   int   set   @maxcount=0     declare   @max_c   int   select   @max_c=max(c)   from   tablename     declare   @recordcount   int   set   @recordcount=0     declare   @a   int   declare   @b   varchar(10)   declare   @c   int     declare   max_cousor   cursor   for   select   *   from   tablename   open   max_cousor   fetch   max_cousor   into   @a,@b,@c     while   @@fetch_status   =0       begin               if(@c=@max_c)                     begin                           insert   into   @temp   values(@a,@b,@c)                           set   @recordcount=@recordcount+1                           fetch   max_cousor   into   @a,@b,@c                             while   @@fetch_status=0                                       begin                                           if(@c=@max_c)                                                 begin                                                       insert   into   @temp   values(@a,@b,@c)                                                      fetch   max_cousor   into   @a,@b,@c                                                      set   @recordcount=@recordcount+1                                                end                                           else                                                 begin                                                                                                                                                            break                                                 end                                                                          end                                                         end               if(@maxcount=@recordcount   and   @maxcount  0)                  begin                         if(@maxcount> =1)                               insert   into   @temp_max   values(null,null,null)                         insert   into   @temp_max                         select   *   from   @temp                         set   @recordcount=0                                             delete   from   @temp                   end             else                 begin                       if(@maxcount


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622772-1-1.html 上篇帖子: 查询SQL Server Index上次Rebuild时间 下篇帖子: 《Troubleshooting SQL Server》读书笔记-内存管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表