我有六行,比如
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解决方案也都可以。
感谢
答案 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