SQL根据姓名得出姓名全拼

mx2593703752 2015-10-28 05:14:53
已经有了根据姓名得出姓名全拼的函数,(在百度搜到的)。
但是,现在有一个人员表,想用姓名得出,姓名的全拼。
已知姓名,如何写语句得出姓名全拼。
函数名称:function [dbo].[fn_GetPinyin](@words nvarchar(2000))
表名称:User
表字段: ID NAME Loginname
1 白洁
2 白杰
3 王静
4 王京
现在想得到下面这样的内容:
ID NAME Loginname
1 白洁 baijie
2 白杰 baijie1
3 王静 wangjing
4 王京 wangjing1
但是,我执行这句话后 update User set Loginname = select dbo.Fn_GetPinYin(name) FROM User
却得出了下面的内容:
ID NAME Loginname
1 白洁 baijie
2 白杰 baijie
3 王静 wangjing
4 王京 wangjing

这样的话会导致,重复。请大神给想想办法,感谢!
...全文
422 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2015-10-28
  • 打赏
  • 举报
回复


-- 再执行一下 update 语句 

create table test(ID int , NAME varchar(10) , Loginname varchar(20))
go
insert into test values
(1,'白洁','baijie'),
(2,'白杰','baijie'),
(3,'王静','wangjing'),
(4,'王京','wangjing'),
(5,'王井','wangjing'),
(6,'王经','wangjing')

go
with m as (
select *  , row_number() over(partition by loginname order by id) rn 
from test 
)
update m set Loginname = Loginname + cast(rn - 1 as varchar(2))
where rn > 1 
go
select * from test 
go
drop table test 
go


(6 行受影响)

(4 行受影响)
ID          NAME       Loginname
----------- ---------- --------------------
1           白洁         baijie
2           白杰         baijie1
3           王静         wangjing
4           王京         wangjing1
5           王井         wangjing2
6           王经         wangjing3

(6 行受影响)




mx2593703752 2015-10-28
  • 打赏
  • 举报
回复
mx2593703752 2015-10-28
  • 打赏
  • 举报
回复
Tiger_Zhao 2015-10-28
  • 打赏
  • 举报
回复
WITH t1 AS (
SELECT ID,
name,
dbo.Fn_GetPinYin(name) PinYin
FROM [USER]
)
,t2 AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY PinYin
ORDER BY name,id
)-1 AS rn
FROM t1
)
UPDATE [USER]
SET [USER].Loginname = t2.PinYin + (CASE WHEN rn=0 THEN
''
ELSE
CONVERT(varchar(11),rn)
END)
FROM [USER], t2
WHERE [USER].ID = t.ID

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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