Sql server 选择具有特定模式的查询,在第一位显示特定记录

Sql server 选择具有特定模式的查询,在第一位显示特定记录,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,查询: 输出: SELECT * FROM station 是否可以显示所有记录,但条件是在第一个位置和下面显示特定记录,然后显示其余所有记录 例如,我的情况如何 id | stationname | total ------------------------- 1 | Khar | 5 2 | SantaCruz | 3 3 | Sion | 2 4 | VT | 1 5 | newFort | 3 6 | Bandra

查询:

输出:

SELECT * FROM station
是否可以显示所有记录,但条件是在第一个位置和下面显示特定记录,然后显示其余所有记录

例如,我的情况如何

id | stationname | total
-------------------------
 1 | Khar        | 5
 2 | SantaCruz   | 3
 3 | Sion        | 2
 4 | VT          | 1
 5 | newFort     | 3
 6 | Bandra      | 2
 7 | Worli       | 1
 8 | Sanpada     | 3
 9 | Joe         | 2
10 | Sally       | 1
11 | Elphiston   | 2
12 | Currey Road | 1
期望输出:

where id=10

如果您有任何想法,我们将不胜感激。

您可以使用union将两个不同的查询合并,如下所示:

id | stationname | total
-------------------------
10 | Sally       | 1
 1 | Khar        | 5
 2 | SantaCruz   | 3
 3 | Sion        | 2
 4 | VT          | 1
 5 | newFort     | 3
 6 | Bandra      | 2
 7 | Worli       | 1
 8 | Sanpada     | 3
 9 | Joe         | 2
11 | Elphiston   | 2
12 | Currey Road | 1
有关

如果看到使用UNION和UNION ALL的两个查询的执行计划,则使用UNION的查询将对结果进行排序,而使用UNION ALL的查询不会对结果进行排序。请参阅两个查询的执行计划

使用联合查询的执行计划:

使用UNION ALL查询的执行计划:

我从使用UNION中发现,在OP提出的情况下,ALL都可以工作,但如果不加区别地使用,可能会出现一些陷阱,导致意外的结果

搜索的排序顺序可以缓解这些问题,前提是在本例中可以选择一个id来保证在列表0中的第一个


cudo感谢他56设置它

你到底为什么想要这样的结果?你可以尝试按列排序=10。我自己还没试过。@hims056:谢谢你的回复,这是我项目中的一个要求,我甚至不知道该由谁来完成,所以我问here@s093294:thnks for rpely,order by work for asec或desc,这里我需要不同的要求我会在pc上检查,但你说你不能按列订购?如果可以按列排序,那么我假设sql可以处理order子句中的表达式。Ect按列排序1+column2 ASECT感谢您,+1使用sql FIDDLE警告:这可能会失败,因为@LievenKeersmaekers-查看联合所有将停止排序。@hims056-我没有找到答案,但OP忽略了提供任何参考。我的直觉告诉我你是对的+在你的答案上加上1,直到证明错误:@hims056-对于OP的问题,+1代表你的答案是正确的,但是绕道者可能想阅读对话和警告。@satindersingh-谢谢。我可能会补充说THEN子句应该包含尽可能低的id值,但我认为这本身就说明了问题。@LievenKeersmaekers-您的解决方案更好。@hims056-可能是这样。时间会证明一切@LievenKeersmaekers-在使用UNION和UNION ALL的两个查询的执行计划中,使用UNION的查询将对结果进行排序,而使用UNION ALL的查询不会对结果进行排序。请参阅两个查询的执行计划。我从@hims056找到了它——我终于花时间测试了一个又一个。对于这个特殊的情况,它是有效的,但为了证明一点,是的,我是邪恶的,我稍微修改了语句,并添加了聚集索引,而没有改变插入顺序。您将注意到,结果现在不是按插入顺序返回,而是按聚集索引顺序返回。总而言之,你可以相信工会会按照你期望的方式行事,但你必须记住那些可能会影响你成绩的小事。
SELECT * FROM Station WHERE ID=10
UNION ALL
SELECT * FROM Station WHERE ID<>10
SELECT * 
FROM   Station 
ORDER BY
       CASE WHEN id = 10 THEN 0 ELSE id END