table1
c1(varchar) c2(varchar)
1,2,3 aa,bb,cc
7,8 hh,ll
9 ii处理tabel1,根据逗号的间隔,使1和aa生成一条记录,2和bb生成一条记录,3和cc生成一条记录。。
生成table2如下:table2
id(int) name(varchar)
1 aa
2 bb
3 cc
7 hh
8 ll
9 ii本人新新手,求处理语句...
c1(varchar) c2(varchar)
1,2,3 aa,bb,cc
7,8 hh,ll
9 ii处理tabel1,根据逗号的间隔,使1和aa生成一条记录,2和bb生成一条记录,3和cc生成一条记录。。
生成table2如下:table2
id(int) name(varchar)
1 aa
2 bb
3 cc
7 hh
8 ll
9 ii本人新新手,求处理语句...
解决方案 »
- 表连接时的判断条件问题
- 请教一句SQL,谢谢
- 本机,SQL2000,在系统帐号SA被删或者密码被篡改的情况下,如何才能管理维护数据库
- SOL Server2000和SQL Server2005客户端能放在一台机器上面吗?
- SQL SERVER 2000 端口问题。高分。。。。。。
- [版务]疑难问题版未结贴申请
- 如何从一张表中的指定列插入到另一张表中
- 请教SQL语句,急~~~~~~,请给予帮助,谢谢!!!!!
- sql7.0备份问题,请赐教!
- 请问sql server的数据库如何指定ip访问?
- 关于一个省/市表的问题
- 如何把一个SQL SERVER2005的数据库备份导到另个SQL SERVER2005的库上?
c1(varchar) c2(varchar) c3(varchar)
1,2,3 aa,bb,cc asdf,dfds,afds生成table2:
id(int) name(varchar) cc3(varchar)
1 aa asdf
2 bb dfds
3 cc afds
ID(自动增加的) 作者 机构 刊名
1 A,B,C D,E,F XX
2 H,J,F,I Z,Y,W,V YY
依次类推,作者跟机构可能是2个,或者是3个,没规律
我想要实现的功能是:
作者 机构 刊名
A D XX
B E XX
C F XX
H Z YY
J Y YY
F W YY
I V YY
数据量大概是20W 条左右,我该怎么实现呢?
谢谢您!
CREATE TABLE tb(ID int,作者 varchar(10),机构 varchar(20),刊名 varchar(10))
INSERT into tb values(1,'A,B,C', 'D,E,F' ,'XX')
INSERT into tb values(2,'H,J,F,I','ZZ,YY,WWW,VVVV','YY')
go
-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1) INTO tmp FROM syscolumns a, syscolumns b select t1.作者,t2.机构,t1.刊名 from
(
select px=(select count(1) from
(
SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
) m where id=t.id and bid<t.bid)+1 , * from
(
SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
) t
) t1,
(
select px=(select count(1) from
(
SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
) m where id=t.id and bid<t.bid)+1 , * from
(
SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
) t
) t2
where t1.id = t2.id and t1.px = t2.px
order by t1.id , t1.pxDROP TABLE tb,tmp/*
作者 机构 刊名
---------- -------------------- ----------
A D XX
B E XX
C F XX
H ZZ YY
J YY YY
F WWW YY
I VVVV YY(所影响的行数为 7 行)
*/
---如果固定每个字段最多只有3个元素,可以如下:create table table1(c1 varchar(10), c2 varchar(20))
insert into table1
select '1,2,3','aa,bb,cc' union all
select '7,8','hh,ll' union all
select '9','ii'
select parsename(replace(c1,',','.'),1) as id,parsename(replace(c2,',','.'),1) as name into table2 from table1 where parsename(replace(c1,',','.'),1) is not null union
select parsename(replace(c1,',','.'),2) as id,parsename(replace(c2,',','.'),2) as name from table1 where parsename(replace(c1,',','.'),2) is not null union
select parsename(replace(c1,',','.'),3) as id,parsename(replace(c2,',','.'),3) as name from table1 where parsename(replace(c1,',','.'),3) is not nullselect * from table2/*
id name
---------------
1 aa
2 bb
3 cc
7 hh
8 ll
9 ii
*/drop table table1,table2