zoukankan      html  css  js  c++  java
  • Sql sever 分组排序

        维护人事的时候人事局要求加入一个新功能,详细需求例如以下:加入的人员在同一个单位的依照顺序编号而且单位也要实现时间排序,也就是说有两个排序,第一单位名称排序。先创建的一直在前。然后依照创建时间依次排序,第二人员排序。每一个单位的人依照一定的编码进行排序。这里听了师哥的建议採用的是给每一个新加的单位独立编号,比方第一个创建的单位是1,然后依次是234···这样就能非常好的排序啦。这里我针对要操作的表新建了一个触发器。以此来实现这个功能。详细代码与说明例如以下。

    --=============================================
    --Author:                徐凤竹
    -- Create date:2015年7月7日16:10:04
    --Description:        插入数据时查看是否存在该单位名称,没有则加入单位名称,实现分组查看
    --=============================================
    ALTER TRIGGER[dbo].[trg_addoutstanding]
       ON [dbo].[T_OutstandingDispatch]
       AFTER INSERT,UPDATE
    AS
    declare
    @myID varchar(50),
    @mycompany varchar(50),
    @mygroupid bigint,
    @sum bigint,
    @maxnum bigint
    --在新插入内容中获取档案编号,单位名称
    select @myID=number,@mycompany=companyName   frominserted
    if update(companyName)
    BEGIN
    --在表中查看有同样单位名称的记录总数
    select@sum=COUNT(*) from T_OutstandingDispatch where companyName =@mycompany
    --查询表中最大的组号,以便为新单位编组号
    select@maxnum=MAX(groupID) from T_OutstandingDispatch
    --查询同样单位的组号(存在)。以便为新单位编组号
    selecttop 1 @mygroupid=groupID  fromT_OutstandingDispatch where companyName =@mycompany
    --假设有同样单位名称的记录大于1(排除自身),则给新单位赋予同样组号。否则按序编写新组号
    if(@sum>1)
    updateT_OutstandingDispatch  setgroupID=@mygroupid where number   =@myID
    else
    updateT_OutstandingDispatch  setgroupID=@maxnum+1 where number =@myID
    END


     

     

     

  • 相关阅读:
    在可变字符串类型varchar建立索引时有什么要注意的吗?
    单表行数多少时适合分库分表?
    存储字符串时怎么设计或者考量那?
    小数类型选择float、double正确吗?
    解决mysql java.sql.SQLException: The server time zone value‘XXXXXX' is unrecognized or represents...
    阿里云 Windows Server 2012 密码过期设置
    规则引擎 drools
    day-06
    微信小程序前端开发踩坑(一)
    CornerStone使用跳坑总结(陆续更新)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6872697.html
Copyright © 2011-2022 走看看