您的位置:程序门 -> ms-sql server -> 应用实例



如何让主查询的结果维持in子查询的排序[已参考过其他贴,无合适solution]


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何让主查询的结果维持in子查询的排序[已参考过其他贴,无合适solution]
发表于:2007-07-13 20:34:28 楼主
我的sql语句是这样的:
select   productid   from   product   where   productid   in   (select   productid   from   ranking   group   by   productid   order   by   avg(rank)   desc)   order   by   productid

这条查询的问题就是:
in   子查询   所得到的结果集   已经按照我的条件   avg(rank)   进行了降序排列
但主查询   最后得到的productid   集合   并不能按照   子查询结果集的排序结果   进行排序

请问   要怎么样才能实现主查询的结果维持in子查询的排序方式?
发表于:2007-07-13 20:41:041楼 得分:0
也就是说   如果子查询结果集   最后的结果是  
productid   {5,12,34,1}

那么主查询怎样才能实现   选出的结果是
5
12
34
1
发表于: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   语句来控制的话   就再好不过了  
希望有经验的朋友给点帮助意见


快速检索

最新资讯
热门点击