0

我有六行像

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

意思是,应该对带有 car apple 和banana 的行进行排序,但是应该对带有 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 解决方案也可以。

谢谢

4

3 回答 3

1

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

例子:

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

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

于 2013-05-31T16:43:27.047 回答
0

没有明确的ORDER BY条款就没有顺序。虽然可以使用UNION对行进行分组,但不能保证无序行的顺序是稳定的。见这里

以下将列表分成两组行,但每组将按以下顺序排序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
于 2013-05-31T14:56:04.907 回答
0

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

select * from (select top 5000 col1 from #tmp order by col1) a
union
select col1 from #tmp
于 2013-05-31T14:56:20.337 回答