首页 新闻 会员 周边

sql server select语句结果要order by

0
悬赏园豆:30 [已解决问题] 解决于 2013-12-10 10:41

表MyTable,列为:[id],[data]

里面有几十行数据,我想选出全部,要排序,但是id=40的不需要排,

就是说我想把除了id=40以外的全部行按data值desc排序,

再把id=40行放到结果的最后面,然后输出

怎么做?

简单的信仰的主页 简单的信仰 | 初学一级 | 园豆:3
提问于:2013-12-09 19:24
< >
分享
最佳答案
1
SELECT *,CASE WHEN ID = 1 THEN 1 ELSE 0 END T1 FROM t ORDER BY T1 ASC


ID = 1换成你指定那一行的条件。

收获园豆:12
I,Robot | 大侠五级 |园豆:9783 | 2013-12-09 19:29
其他回答(5)
1

直接用SQL语句去处理单表,应该是不行的我自己试了用UNION 也不行,但有如下两种方法可行

1 用临时表变量,把排好序不包括指定行的数据,插入到临时表变量中,然后再查询出不需要排序的数据并插入临时表变量中

虽然麻烦了一点,但是实现肯定OK了

2 用程序处理,原理与 上面一样分两次查询并存入一个List中 

收获园豆:6
Zery | 园豆:6151 (大侠五级) | 2013-12-09 21:11
0

其实一楼的方法就比较好!

SELECT *,CASE WHEN ID = 40 THEN 1 ELSE 0 END T1 FROM MyTable ORDER BY T1 ASC,data DESC

junjieok | 园豆:779 (小虾三级) | 2013-12-10 08:23
0

同意一楼的语句
SELECT id,data,CASE WHEN ID = 40 THEN 1 ELSE 0 END T1 FROM MyTable ORDER BY T1 ASC,data DESC

bitbug | 园豆:470 (菜鸟二级) | 2013-12-10 08:55
0

哈哈,学习了

jerry-Tom | 园豆:4077 (老鸟四级) | 2013-12-10 09:47
1

1: 一楼方法可行.

2: select * from(
    select top 10000000 * from MyTable
    where id!=40
    order by data desc
) T
union all
select * from MyTable
where id=40

这样也可以的。

注:top 10000000 这个地方你要给一个足够大的整数,也就是比你整个行数要大的整数。

收获园豆:12
Albert Fei | 园豆:2102 (老鸟四级) | 2013-12-10 10:11

谢谢你!方法2可行,但是我尝试了不要top 语句也行.

其实你的方法的思想也就是临时表嘛

支持(0) 反对(0) 简单的信仰 | 园豆:3 (初学一级) | 2013-12-10 10:27

额...不行!必须要top语句.......

支持(0) 反对(0) 简单的信仰 | 园豆:3 (初学一级) | 2013-12-10 10:28

@简单的信仰: 因为在里面有排序order by,所以必须要top

看1楼有人说union 不行,其实可以用union all 解决方法。

没有用到临时表,思想是按你要的二类数据分别取出再用union all 进行 行组合。

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2013-12-10 12:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册