日期:2014-05-18  浏览次数:20700 次

请教一个Sql语句的写法, 多谢!
有一个Mat表中有如下数据
ComputerID,   MatColor
      1       02,03
      2       02,06,07
      3       01,09
          ………
我想把这个表中的数据拆分成
      1       02
      1       03
      2       02
      2                 06
      2                 07
      3                 01
      3       09
          ………
请问如何写?

------解决方案--------------------
create table tb (ComputerID int, MatColor varchar(20))
insert into tb values(1, '02,03 ')
insert into tb values(2, '02,06,07 ')
insert into tb values(3, '01,09 ')
go

-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b


SELECT
A.ComputerID,
MatColor = SUBSTRING(A.MatColor, B.ID, CHARINDEX( ', ', A.MatColor + ', ', B.ID) - B.ID)
FROM tb A, # B
WHERE SUBSTRING( ', ' + a.MatColor, B.id, 1) = ', '
ORDER BY 1,2
GO

drop table tb,#

/*
ComputerID MatColor
----------- --------------------
1 02
1 03
2 02
2 06
2 07
3 01
3 09

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