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


     

     

     

  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6872697.html
Copyright © 2011-2022 走看看