| 发表于:2007-07-13 23:01:442楼 得分:0 |
哈哈 研究了半天 用了个笨办法 但还是解决了。[application是aspx/vb.net] 我的方法是 step 1: 取得ranking表中 按照平均rank值进行降序排列的记录集 dim strsql as string = "select productid,avg(rank) as [avgrank] from ranking group by productid order by avg(rank) desc " ... da.fill(ds, "rankavg ") ... 得到一个记录集table "rankavg " step 2: 先删除数据库中叫temp_product_rank的表,然后再创建 strsql = "drop table temp_product_rank " ... strsql = "create table temp_product_rank(productid int,rank double) " step 3: 向临时表中插入数据 dim rows as integer = ds.tables( "rankavg ").rows().count dim i as integer for i = 0 to rows - 1 strsql = "insert into temp_product_rank values(@productid,@rank) " cmd = new oledbcommand(strsql, conn) cmd.parameters.add( "@productid ", ds.tables( "rankavg ").rows(i)( "productid ")) cmd.parameters.add( "@rank ", ds.tables( "rankavg ").rows(i)( "avgrank ")) conn.open() cmd.EXECutenonquery() conn.close() next step 4: 联合procut表和临时表 进行查询 strsql = "select top 6 p.* from product p inner join temp_product_rank t on p.productid=t.productid order by t.rank desc " cmd = new oledbcommand(strsql, conn) da = new oledbdataadapter(cmd) conn.open() da.fill(ds, "product ") conn.close() 最后得到的 记录集table “product”里面 就是按照我需要的排序方式进行排序的记录 ------------------------------------------------------------------------------------ 方法很笨 而且肯定不适合大的应用程序(我这个作业是糊弄老师 倒是无所谓 呵呵。。。) 如果能用简单的 sql 语句来控制的话 就再好不过了 希望有经验的朋友给点帮助意见 | | |
|