只排序特定的行sql server

时间:2013-05-31 14:47:43

标签: linq sql-server-2008 sql-order-by

我有六行,比如

col1     col2
--------------
Apple    120
XApple   140 
Banana   130
Xbanana  150
Car      110
XCar     160

我想在col2上对这些行进行排序,但只留下“X”行。

所以排序后的行应该像

col1     col2
--------------
Car      110
Apple    120
Banana   130
XCar     160
XApple   140
Xbanana  150

意思是,应该对带有苹果和香蕉的行进行排序,但是应该保留带有xcar,xapple和xbanana的行,并且只需在末尾添加。 我试过了

select * 
from table
where col1 not like 'X%' order by col2
union
select * 
from table
where symbol like 'X%'

但是sql server不允许这样做。有人能指出我正确的方向或告诉我这是不可能的吗?

PS:任何LINQ解决方案也都可以。

感谢

3 个答案:

答案 0 :(得分:1)

按col1的第一个字符是否为“X”排序,然后按col2排序。

示例:

SELECT *
FROM table
ORDER BY CASE WHEN col1 LIKE 'X%' THEN 1 ELSE 0 END,col2

虽然这不会使LIKE'X%'行无序,但你的例子也没有。

答案 1 :(得分:0)

没有明确的ORDER BY子句,没有订单。虽然您可以使用UNION对行进行分组,但无法保证无序行的顺序是稳定的。请参阅here

以下内容将列表拆分为两组,但每组都按Col1排序:

select Col1, Col2
  from (
    select Col1, Col2, 1 as PleaseSort
      from MyTable
      where Col1 not like 'X%'
    union
    select Col1, Col2, 0
      from MyTable
      where Col1 like 'X%' ) as PlaceHolder
  order by PleaseSort desc, Col1

答案 2 :(得分:0)

如果你知道你将获得多少x行的上限,那么你可以做类似......

select * from (select top 5000 col1 from #tmp order by col1) a
union
select col1 from #tmp