有如下表:
STORE_ID | CUSTOMER_ID
S001 | C001
S001 | C002
能不能把上表SELECT出来变成下面这种形式:
STORE_ID | CUSTOMER_ID
S001 | C001,C002
即以店铺号进行分组,如店铺号为S001的客户有两个:C001和C002,我想把这两个客户ID显示在一个单元格内,用逗号分隔。
一种方法:
Select ',' + CUSTOMER_ID
FROM T_Demo
WHERE STORE_ID = 'S001'
FOR XML PATH('')
Declare @tmpname Nvarchar(4000)
set @tmpname=''
select @tmpname=(@tmpname+[CUSTOMER_ID]+',') from [t_DemoA]
where STORE_ID='S001'
--print @tmpname
set @tmpname2=substring(@tmpname,1,len(@tmpname)-1)
--print @tmpname2
有一个表:
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
先创建以上的测试数据表
创建一个SQLSERVER数据库的用户自定义函数:
自定义函数的使用方法是这样的,注意[dbo]不能省:
效果图:
上图显示有重复数据,加上Group By过滤掉就可以了,完整的用法:
最终效果: