如何排列字符串

keardy 2003-09-11 11:36:06
有一个表

代号 数量 部门
0001 20 1部
0001 25 2部
0001 30 6部
0002 2 1部
0003 2 1部
0003 12 2部

现在要新增一个列“备注”为nvarchar型,
值的定义为
1.部门名称组成的字符串
2.部门名称按照数量大小排列

即,更新后的表为

代号 数量 部门 备注
0001 40 3部 3部2部6部
0001 35 2部 3部2部6部
0001 30 6部 3部2部6部
0002 2 1部 1部
0003 22 1部 1部2部
0003 12 2部 1部2部
...全文
80 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2003-09-11
  • 打赏
  • 举报
回复
--用函数
create function test(@id varchar(20))
returns varchar(8000)
as
begin
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+部门 from 表 where 代号=@id
return(@sql)
end

--执行
--
update 表 set 备注=dbo.test(代号)
keardy 2003-09-11
  • 打赏
  • 举报
回复
哦,不好意思,我把原始表搞错了,就按照第二张表来吧
zjcxc 元老 2003-09-11
  • 打赏
  • 举报
回复
你给出的数据中,代码为001时,不是326部啊,是否数据没有给全?

如果是的话,用下面的方法:
--创建一个合并的函数
create function f_merg(@代号 varchar(20))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+部门 from 表 where 代号=@代号 order by 数量 desc
return(@re)
end
go

--添加备注列,调用此函数进行更新
alter table 表 add 备注 varchar(8000)
update 表 set 备注=dbo.f_merg(代号)
keardy 2003-09-11
  • 打赏
  • 举报
回复
谢谢大家, 我没有说清楚
某个代号可能在不同的部门有不同的数量,按照这个数量从大到小排列,把所属的部门组合起来,成为备注
如代号为0001,按照数量从大到小,部门为3部,2部和6部,那么它的备注就是 3部2部6部
pengdali 2003-09-11
  • 打赏
  • 举报
回复
create function get_n (@i varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
select @str =''
select @str =@str+部门 from 有一个表 where 代号=@i
return @str
end

--调用:
select *,dbo.get_n(代号) 备注 from 有一个表
yujohny 2003-09-11
  • 打赏
  • 举报
回复
代号 数量 部门 备注
0001 40 3部 3部2部6部————》这个字符串是怎么组合来得,说清楚
0001 35 2部 3部2部6部
0001 30 6部 3部2部6部
0002 2 1部 1部
0003 22 1部 1部2部
0003 12 2部 1部2部
CrazyFor 2003-09-11
  • 打赏
  • 举报
回复
看不明白你的 数量 部门 备注的处理规则啊,
zjcxc 元老 2003-09-11
  • 打赏
  • 举报
回复
测试结果

代号 数量 部门 备注
---------- ----------- -------------------- -----------------
0001 20 1部 6部2部1部
0001 25 2部 6部2部1部
0001 30 6部 6部2部1部
0002 2 1部 1部
0003 2 1部 2部1部
0003 12 2部 2部1部

(所影响的行数为 6 行)
zjcxc 元老 2003-09-11
  • 打赏
  • 举报
回复
下面是数据测试

--创建数据测试环境
create table tb(代号 varchar(10),数量 int,部门 varchar(20))
insert into tb
select '0001',20,'1部'
union all select '0001',25,'2部'
union all select '0001',30,'6部'
union all select '0002',2,'1部'
union all select '0003',2,'1部'
union all select '0003',12,'2部'
go

--创建一个合并的函数
create function f_merg(@代号 varchar(20))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+部门 from tb where 代号=@代号 order by 数量 desc
return(@re)
end
go

--添加备注列,调用此函数进行更新
alter table tb add 备注 varchar(8000)
go
update tb set 备注=dbo.f_merg(代号)

--显示更新结果
select *,dbo.f_merg(代号) from tb

--删除测试环境
drop table tb
drop function f_merg
zjcxc 元老 2003-09-11
  • 打赏
  • 举报
回复
--创建一个合并的函数
create function f_merg(@代号 varchar(20))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+部门 from 表 where 代号=@代号 order by 数量 desc
return(@re)
end
go

--添加备注列,调用此函数进行更新
alter table 表 add 备注 varchar(8000)
go
update 表 set 备注=dbo.f_merg(代号)
keardy 2003-09-11
  • 打赏
  • 举报
回复
不对劲阿,不信你们试试?

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧