sql中列转行的问题

 借助用户定义函数:
---------------------------------------------------------------------
--生成测试数据
create   table   表(部门   int,人员   varchar(20))
insert   into   表   select   1, '张三 '
insert   into   表   select   1, '李四 '
insert   into   表   select   1, '王五 '
insert   into   表   select   2, '赵六 '
insert   into   表   select   2, '邓七 '
insert   into   表   select   2, '刘八 '
go

--创建用户定义函数
create   function   f_str(@department   int)
returns   varchar(8000)
as
begin
        declare   @ret   varchar(8000)
        set   @ret   =   ' '
        select   @ret   =   @ret+ ', '+人员   from   表   where   部门   =   @department
        set   @ret   =   stuff(@ret,1,1, ' ')
        return   @ret  
end
go


--执行
select   部门,人员=dbo.f_str(部门)   from   表   group   by   部门   order   by   部门
go

--输出结果
/*
部门     人员
----     --------------
1           张三,李四,王五
2           赵六,邓七,刘八
*/


--删除测试数据
drop   function   f_str
drop   table   表
go

 

 

 

 

create   table   T([name]   nvarchar(20),son_name   nvarchar(20))
insert   T   select '张三 ',     '张小三 '
union   all   select                         '张三 ',     '张小梅 '
union   all   select                         '张三 ',     '张公 '
union   all   select                         '李四 ',     '李小雨 '
union   all   select                         '李四 ',     '李京 '
union   all   select                         '王五 ',     '王虎 '
union   all   select                         '王五 ',     '王日 '

create   function   fun(@name   nvarchar(20))
returns   nvarchar(200)
as
begin
        declare   @re   nvarchar(200)
        set   @re= ' '
        select   @re=@re+ ', '+son_name   from   T   where   [name]=@name
        return   stuff(@re,1,1, ' ')
end

select   distinct   [name],dbo.fun([name])   as   son_name   from   T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值