有一个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 行)
*/