表MyTable,列为:[id],[data]
里面有几十行数据,我想选出全部,要排序,但是id=40的不需要排,
就是说我想把除了id=40以外的全部行按data值desc排序,
再把id=40行放到结果的最后面,然后输出
怎么做?
SELECT *,CASE WHEN ID = 1 THEN 1 ELSE 0 END T1 FROM t ORDER BY T1 ASC
ID = 1换成你指定那一行的条件。
直接用SQL语句去处理单表,应该是不行的我自己试了用UNION 也不行,但有如下两种方法可行
1 用临时表变量,把排好序不包括指定行的数据,插入到临时表变量中,然后再查询出不需要排序的数据并插入临时表变量中
虽然麻烦了一点,但是实现肯定OK了
2 用程序处理,原理与 上面一样分两次查询并存入一个List中
其实一楼的方法就比较好!
SELECT *,CASE WHEN ID = 40 THEN 1 ELSE 0 END T1 FROM MyTable ORDER BY T1 ASC,data DESC
同意一楼的语句
SELECT id,data,CASE WHEN ID = 40 THEN 1 ELSE 0 END T1 FROM MyTable ORDER BY T1 ASC,data DESC
哈哈,学习了
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 这个地方你要给一个足够大的整数,也就是比你整个行数要大的整数。
谢谢你!方法2可行,但是我尝试了不要top 语句也行.
其实你的方法的思想也就是临时表嘛
额...不行!必须要top语句.......
@简单的信仰: 因为在里面有排序order by,所以必须要top
看1楼有人说union 不行,其实可以用union all 解决方法。
没有用到临时表,思想是按你要的二类数据分别取出再用union all 进行 行组合。