• pivot的用法(SQL SERVER 2005以上)


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

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

    图一:请假表(test_qingjia)

     

    图二:加班表(test_jiaban)


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

    图三: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估计还有别的用法的吧,只是我也是昨天刚接触,还没深入了解,所以也不献丑了,各位不防自己试试?知道用法的也可以在这里留言。

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

  • 相关阅读:
    逆向工程工具介绍2-IDA
    汇编语言基础-1 基本语言元素
    Python常用标准库1-Turtle,Random,Time和Datetime
    Python的模块、包和库的概念
    Go语言的函数修饰符
    物理层2-物理层下面的传输媒体
    数据分析之两种用户分群方法(RFM和聚类)
    区间估计与假设检验公式
    源码分析过滤器与拦截器的区别
    Springboot拦截器使用及其底层源码剖析
  • 原文地址:https://www.cnblogs.com/seasons1987/p/2567927.html
Copyright © 2020-2023  润新知