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

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


先创建以上的测试数据表

None.gif if    exists ( select   name   from   sysobjects   where   name = ' DepStaffs '    and   xtype = ' U ' )   
None.gif     
drop    table   DepStaffs   
None.gif  
None.gif
create    table   DepStaffs(   
None.gif   DepID  
int    not    null ,   
None.gif   StaffName  
varchar ( 30 )   not    null ,   
None.gif)   
None.gif
go    
None.gif  
None.gif
insert   DepStaffs   values ( 101 , ' AAAaa ' )
None.gif
insert   DepStaffs   values ( 101 , ' BBBb ' )
None.gif
insert   DepStaffs   values ( 101 , ' CCCccc ' )
None.gif
insert   DepStaffs   values ( 202 , ' DDDddd ' )
None.gif
insert   DepStaffs   values ( 202 , ' EEE ' )
None.gif
insert   DepStaffs   values ( 202 , ' FFF ' )
None.gif
insert   DepStaffs   values ( 303 , ' GGGGG ' )
None.gif

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

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

None.gif SELECT  DepID,  [ dbo ] . [ FN_GetDepStaffNamesByDepID ] (DepID)  As  StaffNames
None.gif
FROM  DepStaffs

效果图:

snap041.jpg


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

None.gif SELECT  DepID,  [ dbo ] . [ FN_GetDepStaffNamesByDepID ] (DepID)  As  StaffNames
None.gif
FROM  DepStaffs
None.gif
GROUP   BY  DepID

最终效果:
snap042.jpg

转载于:https://www.cnblogs.com/CrazyWill/archive/2006/02/20/334247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值