SQL 合并某些字段相同的记录

来源:互联网 发布:10492 知乎 编辑:程序博客网 时间:2024/05/17 06:06

 在数据表t1中存在记录

          

classname   classnum studentname     latetime register reason高二(3)班    06023王强        8.12     8.15   班车没赶上  高二(3)班  06023 王强  8.17     8.22  又没赶上  高二(6)班   06026  陈东    817    8.22    掉水沟里了  高二(3)班 06023 王强    8.12   8.17   null

 

 要得到的记录如下:classname   classnum studentname     latetime register reason  高二(3)班  06023 王强  8.17     8.22  又没赶上  高二(6)班   06026  陈东    817    8.22    掉水沟里了  高二(3)班 06023 王强    8.12   8.17    班车没赶上

   就是如果有两笔资料都一样只是register和reason不同,那么取register大的一笔。我的做法是

  先创建临时表,然后再通过表连接得到对应的reason

  

     create table #cards (
     DeptName nvarchar(50),
     EmpyNo NVARCHAR(15),
     Uname nvarchar(20),
     ADate nvarchar(50),
     MaxIdate datetime
     )
    insert #cards
 select t1.DeptName,t1.EmpyNO,t1.Uname,convert(nvarchar(100),t1.ADate,102) as ADate,max(t1.idate) as maxidate1
 from [FlowBusinessData].[dbo].[AOC_Abnormal_Main] t1 
 where  PCode_level in('12','13') and month(adate)=month(getdate())-1 and inflow='T' 
 group by t1.ADate ,t1.DeptName,t1.EmpyNO,t1.Uname
 

 select t2.DeptName,t2.EmpyNO,t2.Uname,t2.empyno,convert(nvarchar(100),t2.ADate,102) as ADate,t2.Errtype,t2.CardTS,t2.CardTE,t2.idate,t2.BAK
 from [FlowBusinessData].[dbo].[AOC_Abnormal_Main] t2 ,#cards
 where #cards.empyno=t2.empyno   and #cards.adate=convert(nvarchar(100),t2.ADate,102)  and #cards.MaxIdate=t2.idate
 group by t2.ADate ,t2.empyno,t2.DeptName,t2.EmpyNO,t2.Uname,t2.Errtype,t2.CardTS,t2.CardTE,t2.BAK,t2.idate
 

 

 

 

 

 

原创粉丝点击