2013-05-31 45 views
0

我有六排像特定行的SQL Server

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

有没有明确的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 
+0

给我'附近的订单不正确的语法' – user1

+0

@ user1 - 我总是忘记那个愚蠢的别名。更新了答案。 – HABO

+0

真棒,谢谢 – user1

0

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

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

据我所知,UNION通常像DISTINCT一样工作,并执行以前值的扫描并追加新行(UNION ALL会追加所有行),因此您的ORDER _should_将被保留 - 但测试! –

1

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

例子:

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

虽然,这不会离开LIKE 'X%' 的行无序的,也不是你的榜样。

相关问题