SQL Server查询结果排序的问题。

我就不写完整语句了,看得懂就行了。wherenamein('123','12','856','475')这样查出来的结果他自动给我排序了,变成这样12123475856我... 我就不写完整语句了,看得懂就行了。

where name in ('123','12','856','475')

这样查出来的结果他自动给我排序了,变成这样
12
123
475
856

我想要按输入的顺序排序怎么实现,要这样的。
123
12
856
475
展开
 我来答
摆渡浮桥
推荐于2016-03-10 · TA获得超过3629个赞
知道大有可为答主
回答量:1610
采纳率:100%
帮助的人:2224万
展开全部
如果要根据输入的顺序输出结果,应当先将输入结果排序,改用inner join 代替 in子句。
假设表名为A
with cte_input
as(
select '123' as name, 1 as seq -- 序号
union
select '12' , 2
union
select '856',3
union
select '475', 4
)
select A.* from A left join cte_input as B
on A.name = B.name
order by B.seq -- 按输入顺序输出结果。
追问
问题是,实际情况不止这四个数据啊,300多个呢,要这么排序的话那不得手动输入300多次啊....
追答
你可以用identity(1,1) 函数,将输入的结果集插入到一个临时表,然后用临时表做内连接。
主要是给思路,具体实现可以灵活运用。
还可以在应用程序端,接受用户输入时就设好序号。
lph121518
2012-08-27
知道答主
回答量:42
采纳率:0%
帮助的人:22.6万
展开全部
对该表增加一个字段 orderid 然后手动修改其对应的值 然后根据要求进行排序就ok了
更多追问追答
追问
详细点行不? 看不懂啊
追答
比如表t_a有id和name两个字段    现在手动加一个字段orderid    然后你对你想要排列在前面的name的orderid进行修改  最后只要order by orderid 就好了 。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太阳的哲学
2012-08-27 · TA获得超过414个赞
知道小有建树答主
回答量:274
采纳率:66%
帮助的人:311万
展开全部
如果是自动排序的话可能是因为这个查询基于索引扫描,把索引删掉试试
更多追问追答
追问
怎么删?
追答
你在这个表上建过索引吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式