转学一个CSDN群友的好问题案例!!!关于把科目属性用数字替换如下:

 有一个表,数据是学生选课情况,例如:
姓名: 科目:
张三 语文
李四 数学
王五 历史
西的 数学,历史
似的 化学
地方 语文,化学
等等,
我想将科目用编号代替,结果如下:
姓名: 科目:
张三 1
李四 2
王五 3
西的 2,3
似的 4
地方 1,4

完整的解决方案为:
先建好科目表,结构如下:
Create table cls (clsid int,clsname varchar(10))
insert cls values(1,'语文')
insert cls values(2,'数学')
insert cls values(3,'英语')

然后根据如下函数更新学生选课表:
create function fGetSubject(@subject varchar(1000))  -----------对应于课目可有,如一个人有数学,语文等
as
return varchar(100)  ------返回类型
begin
declare @str varchar(100)  ---------对应于返回值类型,
set @str='' ----------记住这里不是空字符,面是双紧团引号如:‘’,而不是'   '
select @str=@str+','+rtrim(clsid) -----加',',形成结果为:1,2,3之类的结果  (circlex)

from cls

where charindex(clsname ,@subject)>0  -------------为了只找出表中有科目与FUNCTION匹配时,才处理------(circlex)
select @str=stuff(@str,1,1,'')  ----截取第一个‘,’,而形成结果为1 或1,2,3(而不是,1或,1,2,3)
return @str ---------返回值
end

update 学生选课表 set 科目=dbo.fGetSubject(科目) ----------用FUNCTION更新表中数据
  注:两个(circlex)间的语句对FUNCTION的@subject进行处理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值