pt1314917的留言



lcnm2000发表于:2008-08-07

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

杨开睿发表于:2008-05-29

can you give me some small c++ program,I am a new hand ...........

小马哥~发表于:2008-05-26

踩踩猪的空间