首页 新闻 搜索 专区 学院

用sql语句,如何把select出来的一列数据放在第一个单元格

0
悬赏园豆:30 [已解决问题] 解决于 2011-03-29 17:51

有如下表:

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('')

精致码农的主页 精致码农 | 菜鸟二级 | 园豆:231
提问于:2011-03-29 15:39
< >
分享
其他回答(1)
0
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
邀月 | 园豆:25375 (高人七级) | 2011-03-29 16:17
谢谢,很满意。
支持(0) 反对(0) 精致码农 | 园豆:231 (菜鸟二级) | 2011-03-29 18:15
0

有一个表:  
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


先创建以上的测试数据表

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


创建一个SQLSERVER数据库的用户自定义函数:

CREATE FUNCTION [dbo].[FN_GetDepStaffNamesByDepID]
(
    
@DepID int
)
RETURNS [nvarchar](4000)
AS

BEGIN
    
DECLARE @ReturnValue [nvarchar](4000)
    
SET @ReturnValue = ''

    
SELECT @ReturnValue=@ReturnValue + LTRIM(RTRIM(DepStaffs.StaffName))  + ';'
         
FROM DepStaffs
        
WHERE DepStaffs.DepID = @DepID

    
SET @ReturnValue = ISNULL(@ReturnValue,';')
    
RETURN @ReturnValue

END

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

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

效果图:




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

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

最终效果:

收获园豆:30
奋斗张 | 园豆:514 (小虾三级) | 2011-03-29 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册