日期:2014-05-16  浏览次数:20661 次

如何在SQL 2000中 把一个字段的内容拆成N行N列

如何把TAB1表:
A710         A711
张三     扣1;缺勤;11天;扣2;旷工;2天;扣3;考核不合格;
张五     扣1;旷工;2天;扣2;事假;3天;


变成TAB2表:
A710     类别        天数
张三     缺勤        11天
张三     旷工         2天
张三     考核不合格
张五     旷工         2天
张五     事假         3天

数据库是SQL 2000的
------解决方案--------------------
本帖最后由 TravyLee 于 2014-02-13 11:33:58 编辑
引用:
Quote: 引用:


----------------------------------------------------------------
-- Author  :TravyLee(走自己的路,让狗去叫吧!)
-- Date    :2014-02-13 10:54:10
-- Version:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
-- Jul  9 2008 14:43:34 
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:#TAB1
if object_id('tempdb.dbo.#TAB1') is not null drop table #TAB1
go 
create table #TAB1([A710] varchar(4),[A711] varchar(42))
insert #TAB1
select '张三','扣1;缺勤;11天;扣2;旷工;2天;扣3;考核不合格;' union all
select '张五','扣1;旷工;2天;扣2;事假;3天;'
go

select top 8000 id = identity(int, 1, 1) into #tb from syscolumns a, syscolumns b 

select A.A710, substring(A.A711, B.id, charindex(';', A.A711 + ';', B.id) - B.id) as [A711]
from #TAB1 A, #tb B 
where substring(';' + A.A711, B.id, 1) = ';' 

 /*
 A710 A711
 -----------------------
张三 扣1
张三 缺勤
张三 11天
张三 扣2
张三 旷工
张三 2天
张三 扣3
张三 考核不合格
张三
张五 扣1
张五 旷工
张五 2天
张五 扣2
张五 事假
张五 3天
张五
 */
drop table #tb,#TAB1

不是这个效果啊  
需要这样
A710     类别        天数
张三     缺勤        11天
张三     旷工         2天
张三     考核不合格
张五     旷工         2天
张五     事假         3天



----------------------------------------------------------------
-- Author  :TravyLee(走自己的路,让狗去叫吧!)
-- Date    :2014-02-13 10:54:10
-- Version:
--      Microsoft SQL Server 2008 (RTM)