SQL语句实现合并数据(原创)


有一个表:  
DepID         StaffName
----------------------  
101            AAAaa
101            BBBb
101            CCCccc
202            DDDddd
202            EEE
202            FFF
303            GGGGG

表说明,DepID为部门ID,StaffName为员工姓名,一个部门当然会有0..N多个员工 :)

用SQL语句如何将上面的表变成下面组合起来的方式呢。  
DepID        StaffNames
-------------------  
101 AAAaa;BBBb;CCCccc
202 DDDddd;EEE;FFF
303 GGGGG


先创建以上的测试数据表

SQL语句实现合并数据(原创)if  exists(select  name  from  sysobjects  where  name='DepStaffs'  and  xtype='U')   
SQL语句实现合并数据(原创)     
drop  table  DepStaffs   
SQL语句实现合并数据(原创)  
SQL语句实现合并数据(原创)
create  table  DepStaffs(   
SQL语句实现合并数据(原创)   DepID  
int  not  null,   
SQL语句实现合并数据(原创)   StaffName  
varchar(30)  not  null,   
SQL语句实现合并数据(原创))   
SQL语句实现合并数据(原创)
go   
SQL语句实现合并数据(原创)  
SQL语句实现合并数据(原创)
insert  DepStaffs  values(101,'AAAaa')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(101,'BBBb')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(101,'CCCccc')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(202,'DDDddd')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(202,'EEE')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(202,'FFF')
SQL语句实现合并数据(原创)
insert  DepStaffs  values(303,'GGGGG')
SQL语句实现合并数据(原创)

创建一个SQLSERVER数据库的用户自定义函数:
SQL语句实现合并数据(原创)CREATE FUNCTION [dbo].[FN_GetDepStaffNamesByDepID]
SQL语句实现合并数据(原创)(
SQL语句实现合并数据(原创)    
@DepID int
SQL语句实现合并数据(原创))
SQL语句实现合并数据(原创)
RETURNS [nvarchar](4000)
SQL语句实现合并数据(原创)
AS
SQL语句实现合并数据(原创)
BEGIN
SQL语句实现合并数据(原创)    
DECLARE @ReturnValue [nvarchar](4000)
SQL语句实现合并数据(原创)    
SET @ReturnValue = ''
SQL语句实现合并数据(原创)    
SELECT @ReturnValue=@ReturnValue + LTRIM(RTRIM(DepStaffs.StaffName))  + ';'
SQL语句实现合并数据(原创)         
FROM DepStaffs
SQL语句实现合并数据(原创)        
WHERE DepStaffs.DepID = @DepID
SQL语句实现合并数据(原创)    
SET @ReturnValue = ISNULL(@ReturnValue,';')
SQL语句实现合并数据(原创)    
RETURN @ReturnValue
SQL语句实现合并数据(原创)
END

自定义函数的使用方法是这样的,注意[dbo]不能省:

SQL语句实现合并数据(原创)SELECT DepID, [dbo].[FN_GetDepStaffNamesByDepID](DepID) As StaffNames
SQL语句实现合并数据(原创)
FROM DepStaffs

效果图:

SQL语句实现合并数据(原创)


上图显示有重复数据,加上Group By过滤掉就可以了,完整的用法:

SQL语句实现合并数据(原创)SELECT DepID, [dbo].[FN_GetDepStaffNamesByDepID](DepID) As StaffNames
SQL语句实现合并数据(原创)
FROM DepStaffs
SQL语句实现合并数据(原创)
GROUP BY DepID

最终效果:
SQL语句实现合并数据(原创)

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
  • 2021-12-11
猜你喜欢
  • 2021-11-22
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案