/*
测试环境:windows 2K server + Mssql 2000
所有功能都进行测试过,并有相应的结果集,如果有什么疑义在论坛跟帖
关于版权的说明:部分资料来自互联网,如有不当请联系版主,版主会在第一时间处理。
功能:行列的互换一。
*/
--数据准备
CREATE TABLE #T(bh VARCHAR(10),gx VARCHAR(3),dept VARCHAR(3))
INSERT #T
SELECT 'TMS1056AD', '01', 'A-a'
UNION ALL SELECT 'TMS1056AD', '02', 'B-a'
UNION ALL SELECT 'TMS1056AD', '03', 'C-a'
UNION ALL SELECT 'TMS1056AD', '04', 'E-a'
UNION ALL SELECT 'TMS1056AD', '05', 'G-a'
UNION ALL SELECT 'TMS1056AD', '06', 'D-a'
UNION ALL SELECT 'TMS1058AD', '06', 'A-a'
UNION ALL SELECT 'TMS1058AD', '07', 'D-a'
UNION ALL SELECT 'TMS1058AD', '08', 'F-a'
SELECT * FROM #T
/*
bh gx dept
---------- ---- ----
TMS1056AD 01 A-a
TMS1056AD 02 B-a
TMS1056AD 03 C-a
TMS1056AD 04 E-a
TMS1056AD 05 G-a
TMS1056AD 06 D-a
TMS1058AD 06 A-a
TMS1058AD 07 D-a
TMS1058AD 08 F-a
*/
-- SQL
declare @sql varchar(8000)
set @sql='select bh'
select @sql= @sql+ ',min(case when gx = ''' + gx + ''' then dept end) [' + gx + ']' from (select distinct gx from #T) a
set @sql=@sql+' from #T group by bh'
--print @sql
exec (@sql)
/*
bh 01 02 03 04 05 06 07 08
---------- ---- ---- ---- ---- ---- ---- ---- ----
TMS1056AD A-a B-a C-a E-a G-a D-a NULL NULL
TMS1058AD NULL NULL NULL NULL NULL A-a D-a F-a
*/