pivot的用法(SQL SERVER 2005以上)

系统 1701 0

 

OA系统听过木有?OA流程知道吧??OA系统都会有流程,而流程就需要有表单(也就是流程中需要提交的数据).这些表单会因流程的不同而不同.怎么个不同法呢,举个例吧:假如我需要通过OA系统来申请一个请假流程,那么在这个流程中,我可能要填到一个表单(也叫选项):请假原因.同样的,假如我需要申请一个加班流程的话,那么在这个流程当中,我理所当然的要填一个表单:加班原因.

做过web表单的人都清楚,这些数据是要存到数据表里面的,一般来说我们储存的形式应该如下面两幅图所示:

图一:请假表(test_qingjia)

 

图二:加班表(test_jiaban)


        好了,很普通的表.那如果我们的表单某一天需要变更呢?比如新增一个字段,又或删掉一个字段,是用Alter语法来修改表吗??新增还好说,万一要删除呢?数据不就完蛋啦???用标识?你怎么告诉系统哪个字段是要显示出来的,哪里数据是暂时停用的??用另一张表把这些字段名称都存着?然后select的时候不select * 而select [...]??好想法,不过这也太麻烦了.那咋办啊?看标题...
        没错,广大淫民群众的福音到了,下面要介绍的东西就是为了解决上面的难题的.实际上,OA系统中一般来说会有两张表,一张是用来存放流程的名称、新建的日期、新建人啊、流程主键等等信息,然后会在另外一张表存放对应的表单字段等等信息。第一张表就不说了,我只说第二张表的,我只以请假表为例子说明一下,先上图。

pivot的用法(SQL SERVER 2005以上)

图三:OA系统中的请假表单字段存放形式(表名:table_test)

 

        好了,图看完了没有,这就是字段的存放方式了。那怎么样从这个鸟得到图一的输出呢??直接贴上代码好了,如下:至于pivot的用法,最好意会,懒得言传,详见百度。

        
          select
        
         id,
        
          [
        
        
          姓名
        
        
          ]
        
        ,
        
          [
        
        
          開始時間
        
        
          ]
        
        ,
        
          [
        
        
          結束時間
        
        
          ]
        
        ,
        
          [
        
        
          請假原因
        
        
          ]
        
        
          from
        
        
           (


        
        
          select
        
        
           id,names,colvalue


        
        
          from
        
        
           table_test

) 
        
        
          as
        
         table1 pivot (
        
          max
        
        (colvalue) 
        
          for
        
         names 
        
          in
        
        (
        
          [
        
        
          姓名
        
        
          ]
        
        ,
        
          [
        
        
          開始時間
        
        
          ]
        
        ,
        
          [
        
        
          結束時間
        
        
          ]
        
        ,
        
          [
        
        
          請假原因
        
        
          ]
        
        )) 
        
          as
        
         col1
      

         执行结果如下:

  图四: 输出结果

 

        注:为了好说明,我直接把字段名称建成了中文的,另外,由于我的系统都是繁体版的,输入简体有乱码,无奈之下,截图的时候看到的都是繁体,有看不懂的小朋友可以Q我一下,我帮忙翻译一下,由于本人目前能力实在有限,所以只能向广大的女性朋友翻译,还提供上门服务,让您感到真正的贴心、放心和省心。

        另外,那个字段的type估计还有别的用法的吧,只是我也是昨天刚接触,还没深入了解,所以也不献丑了,各位不防自己试试?知道用法的也可以在这里留言。

         最后,甩一句:只有想不到,没有做不到。

pivot的用法(SQL SERVER 2005以上)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论