首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请帮忙看以下怎么用sql语句实现下列功能

2012-03-20 
请帮忙看以下如何用sql语句实现下列功能在一个数据表中表结构及记录如下:bhmc001x/y/z32s(50/25/25)002x/y

请帮忙看以下如何用sql语句实现下列功能
在一个数据表中   表结构及记录如下:
        bh                   mc
  001                     x/y/z32s(50/25/25)
  002                     x/y45s(65/35)
  003                     x40s  


.........................

根据以上表生成另外一个表结构如下:

    bh                               mc                               js
    001                             x                                 50
    001                             y                                 25    
    001                             z                                 25
    002                             x                                 65  
    002                             y                                 35
    003                             x                                 100  

......................


[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(bh varchar(10),mc varchar(50))
insert into tb(bh,mc) values( '001 ', 'x/y/z32s(50/25/25) ')
insert into tb(bh,mc) values( '002 ', 'x/y45s(65/35) ')
insert into tb(bh,mc) values( '003 ', 'x40s ' )
go

alter table tb add mc1 varchar(50)
alter table tb add mc2 varchar(50)
go

update tb
set mc1 = left(mc , charindex( '( ',mc) -1),
mc2 = substring(mc , charindex( '( ' , mc) + 1 , charindex( ') ' , mc) - charindex( '( ' , mc) - 1)
where charindex( '( ' , mc) > 0

SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b

SELECT
id = identity(int,1,1),
A.bh,
mc1 = SUBSTRING(A.mc1, B.ID, CHARINDEX( '/ ', A.mc1 + '/ ', B.ID) - B.ID)
into test1
FROM tb A, # B
WHERE SUBSTRING( '/ ' + A.mc1, B.ID, 1) = '/ '
ORDER BY 1,2

SELECT
id = identity(int,1,1),
A.bh,
mc2 = SUBSTRING(A.mc2, B.ID, CHARINDEX( '/ ', A.mc2 + '/ ', B.ID) - B.ID)
into test2
FROM tb A, # B


WHERE SUBSTRING( '/ ' + A.mc2, B.ID, 1) = '/ '
ORDER BY 1,2

select a.bh , left(a.mc1,1) mc1 , b.mc2 from test1 a,test2 b where a.id = b.id

drop table tb,#,test1,test2

/*
bh mc1 mc2
---------- ---- --------------------------------------------------
001 x 50
001 y 25
001 z 25
002 x 65
002 y 35

(所影响的行数为 5 行)
*/

热点排行