Sqlsever分组排序

2015-07-24 06:31:51 · 作者: · 浏览: 1

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

?

--=============================================
--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