现有表1 <br />姓名 单位 成绩 名次 类别<br />王一 行政 9.80 1<br />王二 工商 9.75 1 <br />王三 法律 9.88 1<br />王五 工商 9.77 2<br />...... <br /><br />转换成表2 <br />名次 第一名 第二名 第三名 第四名 第五名 第六名 第七名 第八名 <br />单位 法律 行政 <br />姓名 王三 王一 <br />成绩 9.88 9.80 <br /><br />1.表1行不定,名次按输入的成绩进行排序 <br />2.表2在.net中显示,若表一行小于8,则按表1的行数(例5行)自动填充表(例填充第一到第五名的数据)<br /><br />--> 测试数据: [表1]<br />if object_id('[表1]') is not null drop table [表1]<br />create table [表1] (姓名 varchar(4),单位 varchar(4),成绩 numeric(3,2),名次 int,类别 int)<br />insert into [表1]<br />select '王一','行政',9.80,null,1 union all<br />select '王二','工商',9.75,null,1 union all<br />select '王三','法律',9.88,null,1 union all<br />select '王五','工商',9.77,null,2<br /><br /><br />declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)<br />set @sql1='select ''单位''名次'<br />set @sql2='select ''姓名''名次'<br />set @sql3='select ''成绩''名次'<br />select @sql1=@sql1+',[第'+ltrim(名次)+'名]=max(case 名次 when '''+ltrim(名次)+''' then 单位 else '''' end)',<br />@sql2=@sql2+',[第'+ltrim(名次)+'名]=max(case 名次 when '''+ltrim(名次)+''' then 姓名 else '''' end)',<br />@sql3=@sql3+',[第'+ltrim(名次)+'名]=max(case 名次 when '''+ltrim(名次)+''' then ltrim(成绩) else '''' end)'<br />from (select 名次=(select count(1) from 表1 where 成绩>=a.成绩) from [表1] a)b order by 名次<br />set @sql1=@sql1+' from (select 单位,名次=(select count(1) from 表1 where 成绩>=a.成绩) from [表1] a)b'<br />set @sql2=@sql2+' from (select 姓名,名次=(select count(1) from 表1 where 成绩>=a.成绩) from [表1] a)b'<br />set @sql3=@sql3+' from (select 成绩,名次=(select count(1) from 表1 where 成绩>=a.成绩) from [表1] a)b'<br />exec( @sql1+' union all '+@sql2+' union all '+@sql3)<br /><br />--结果:<br />名次 第1名 第2名 第3名 第4名 <br />---- ---------------- ---------------- ---------------- ---------------- <br />单位 法律 行政 工商 工商<br />姓名 王三 王一 王五 王二<br />成绩 9.88 9.80 9.77 9.75<br />谢谢你的回复<br />现还有一问题,若表1中数据较多,故增加了一行类别,如何根据给定的类别(例=1,见改动表)进行上述操作