有一个表,数据是学生选课情况,例如: 
姓名: 科目: 
张三 语文 
李四 数学 
王五 历史 
西的 数学,历史 
似的 化学 
地方 语文,化学 
等等, 
我想将科目用编号代替,结果如下: 
姓名: 科目: 
张三 1 
李四 2 
王五 3 
西的 2,3 
似的 4 
地方 1,4 
等等, 
我该如何更改,才能实现上面的效果
问题补充:记录很多,而且科目不定,
问题是如何建科目表,条件是只给定选课表,在这基础上怎样取出科目再建科目表,而且每个科目都有一个固定的编号,然后再用这些编号替代选课表中的科目

解决方案 »

  1.   

    先建好科目表,结构如下:
    Create table cls (clsid int,clsname varchar(10))
    insert cls values(1,'语文') 
    insert cls values(2,'数学') 
    insert cls values(3,'英语')然后根据如下函数更新学生选课表:
      

  2.   

    create function fGetSubject(@subject varchar(1000))
    as
    return varchar(100)
    begin
    declare @str varchar(100)
    set @str=''
    select @str=@str+','+rtrim(clsid) from cls where charindex(clsname ,'语文,数学,生物')>0
    select @str=stuff(@str,1,1,'')
    --select @str
    end
      

  3.   

    --修订
    create function fGetSubject(@subject varchar(1000))
    as
    return varchar(100)
    begin
    declare @str varchar(100)
    set @str=''
    select @str=@str+','+rtrim(clsid) from cls where charindex(clsname ,'语文,数学,生物')>0
    select @str=stuff(@str,1,1,'')
    return @str
    end
      

  4.   

    你可以先把表中的学科一列中每个科目都取出来,导入临时表后用distinct去处重复,再写case 
    when 语句就可以全部改过来了
      

  5.   

    select id,
    case when id =exp then 'expr' else ''end as alias
    from tbname
      

  6.   

    完整的解决方案为:
    先建好科目表,结构如下:
    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) from cls where charindex(clsname ,@subject)>0
    select @str=stuff(@str,1,1,'')
    return @str
    endupdate 学生选课表 set 科目=dbo.fGetSubject(科目)
      

  7.   

    splory(爽儿)的解决方案应该是最佳的了,你如果要想简单一点,也可以用replace把科目名称替换成对应的科目编号。如下:
    update 学生选课表 set 科目 = replace(科目,'语文','1')
    update 学生选课表 set 科目 = replace(科目,'数学','2')
    update 学生选课表 set 科目 = replace(科目,'英语','3')
    ...这个方法比较傻瓜,但是比splory(爽儿)的好理解一点,呵呵。