表A中有字段课程kc,它的存储方式为a;b;c;xcv  a  
里面可能有分号,也可能没有分号,表示一个人有多少种课程,
现要转换课程的名称,在另一表B中存储着转换规则,字段kc,转换ZHA,转换ZHB,
kc    zhA   ZHB 
a      5    fd
b      3    vc
c      2    fv
..如果原来表A中存储课程为 a;b;c
则转换为表C中储存为  字段简称jc  5;3;2  字段代码  fd;vc;fv如果原来表A中存储课程为 b;c
则转换为表C中储存为  字段简称jc  3;2  字段代码  vc;fv
如果原来表A中存储课程为 c;a
则转换为表C中储存为  字段简称jc  2;3  字段代码  fv;vc用sql语句该怎么转换?

解决方案 »

  1.   

    有相似的课程的 ,有的课程叫a,有的课程叫aa
      

  2.   


    select *,STUFF((SELECT ';'+t.字段简称 FROM xxx t 
    WHERE t.主键=主表主键 FOR XML PATH('')), 1, 1, '') as 字段简称
    STUFF((SELECT ';'+t.字段代码 FROM xxx t 
    WHERE t.主键=主表主键 FOR XML PATH('')), 1, 1, '') as 字段代码 
    from 主表
      

  3.   

    看不懂,而且是sqlserver2000的
      

  4.   

    你给的表结构数据不完整,先给你个例子,对照修改下
    --有表tb, 如下:
    /*
    id value
    ----------- -----------
    1 aa,bb
    2 aaa,bbb,ccc
    */
    --欲按id,分拆value列, 分拆后结果如下:
    /*
    id value
    ----------- --------
    1 aa
    1 bb
    2 aaa
    2 bbb
    2 ccc
    */SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b  SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)
    FROM tb A, # B
    WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','
    --where charindex(',',','+A.[values],B.id)=B.id
      

  5.   

    我是这种意思啊
    --有表a, 如下:
    /*
     value
    ----------- -----------
     a
     aa;bb
     aaa;bbb;ccc表b是储存转换规则
    kc  zhA ZHB  
    a   6   de
    aa  5   fd
    bb  3   vc
    aaa 2   fv
    bbb 1   df
    ccc 0   13
    ....要求结果如下
    valuea valueb
    6       de
    5;3     fd;vc
    2;1;0   fv;df;13
    ....