表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语句该怎么转换?
里面可能有分号,也可能没有分号,表示一个人有多少种课程,
现要转换课程的名称,在另一表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语句该怎么转换?
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 主表
--有表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
--有表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
....