按我的意愿在sql server中排序..

编程入门 行业动态 更新时间:2024-10-26 20:28:51
本文介绍了按我的意愿在sql server中排序..的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我试图按照我的意愿订购。但我无法做到。

选择 * 来自 #tempmonthly with ( nolock ) order by hub_id(已排序, 12 , 1 , 20 , 2 , 136 , 3 , 9 , 4 , 1 , 5 , 652 , 6 , 672 , 7 , 129 , 8 , 240 , 9 , 17 , 10 , 14 , 11 , 627 , 12 , 18 , 13 , 574 , 14 , 158 , 15 , 145 , 16 )

我尝试了这个,但是我收到了错误 'hub_id'不是公认的内置函数名。 工作代码如下:

选择 * 来自 #tempmonthly with ( nolock )订单 按 hub_id

引导我[因为我想自己安排订购]。 我试着谷歌吧。我得到了这样的答案

按解码排序(已排序,' F', 1 ,' C', 2 ,' A ', 3 ,' B', 4 ,' G', 5 ,' D', 6 ,' E', 7 , 8 )

所以我试着做在我的代码中:

选择 * 来自 #tempmonthly with(nolock)order by hub_id(sorted, 12 , 1 , 20 , 2 , 136 , 3 , 9 , 4 , 1 , 5 , 652 , 6 , 672 , 7 , 129 , 8 , 240 , 9 , 17 , 10 , 14 , 11 , 627 , 12 , 18 , 13 , 574 , 14 , 158 , 15 , 145 , 16 )

但是它不起作用

解决方案

除了创建新表之外别无他法;)

DECLARE @ sortOrder (hub_id INT ,ord INT IDENTITY ( 1 , 1 )) INSERT INTO @ sortOrder (hub_id) SELECT 12 UNION ALL SELECT 1 UNION ALL SELECT 20 UNION ALL SELECT 2 UNION ALL SELECT 136 UNION 所有 SELECT 3 UNION ALL SELECT 9 UNION 所有 SELECT 4 UNION ALL SELECT 1 UNION ALL SELECT 5 UNION ALL SELECT 652 UNION 所有 SELECT 6 UNION ALL SELECT 672 UNION ALL SELECT 7 UNION ALL SELECT 129 UNION 所有 SELECT 8 UNION ALL SELECT 240 UNION 所有 SELECT 9 UNION ALL SELECT 17 UNION ALL SELECT 10 UNION ALL SEL ECT 14 UNION ALL SELECT 11 UNION 所有 SELECT 627 UNION ALL SELECT 12 UNION ALL SELECT 18 UNION ALL SELECT 13 UNION 所有 SELECT 574 UNION ALL SELECT 14 UNION 所有 SELECT 158 UNION ALL SELECT 15 UNION ALL SELECT 145 UNION ALL SELECT 16

然后加入两个表:

SELECT t1。* FROM #tempmonthly AS t1 INNER JOIN @sortOrder AS t2 ON t1.hub_id = t2.hub_id ORDER BY t2.ord

另一种方法是使用 CASE 和 ORDER 语句,但是 - 在我看来 - 这个更少优雅;(

SELECT * FROM #tempmonthly ORDER BY CASE WHEN hub_id = 12 那么 1 WHEN hub_id = 1 那么 2 WHEN hub_id = 20 那么 3 WHEN hub_id = 2 那么 4 ... ELSE 123 END

I was trying to order by my wish. But i m unable to do.

select * from #tempmonthly with(nolock) order by hub_id(sorted,12,1,20,2,136,3,9,4,1,5,652,6,672,7,129,8,240,9,17,10,14,11,627,12,18,13,574,14,158,15,145,16)

I tried this, but i got error 'hub_id' is not a recognized built-in function name. Working code is as follows:

select * from #tempmonthly with(nolock) order by hub_id

Guide me[as i want to arrange by my own order by]. I tried to google it. I got this answer like this

order by decode( sorted, 'F',1, 'C',2, 'A',3, 'B',4, 'G',5, 'D',6, 'E',7, 8 )

So i tried to do that in my code:

select * from #tempmonthly with(nolock) order by hub_id (sorted,12,1,20,2,136,3,9,4,1,5,652,6,672,7,129,8,240,9,17,10,14,11,627,12,18,13,574,14,158,15,145,16)

But it is not working

解决方案

There is no other way than creating new table ;)

DECLARE @sortOrder(hub_id INT, ord INT IDENTITY(1,1)) INSERT INTO @sortOrder (hub_id) SELECT 12 UNION ALL SELECT 1 UNION ALL SELECT 20 UNION ALL SELECT 2 UNION ALL SELECT 136 UNION ALL SELECT 3 UNION ALL SELECT 9 UNION ALL SELECT 4 UNION ALL SELECT 1 UNION ALL SELECT 5 UNION ALL SELECT 652 UNION ALL SELECT 6 UNION ALL SELECT 672 UNION ALL SELECT 7 UNION ALL SELECT 129 UNION ALL SELECT 8 UNION ALL SELECT 240 UNION ALL SELECT 9 UNION ALL SELECT 17 UNION ALL SELECT 10 UNION ALL SELECT 14 UNION ALL SELECT 11 UNION ALL SELECT 627 UNION ALL SELECT 12 UNION ALL SELECT 18 UNION ALL SELECT 13 UNION ALL SELECT 574 UNION ALL SELECT 14 UNION ALL SELECT 158 UNION ALL SELECT 15 UNION ALL SELECT 145 UNION ALL SELECT 16

then to join both tables:

SELECT t1.* FROM #tempmonthly AS t1 INNER JOIN @sortOrder AS t2 ON t1.hub_id = t2.hub_id ORDER BY t2.ord

Another way is to use CASE with ORDER statement, but - in my opinion - this is less elegant ;(

SELECT * FROM #tempmonthly ORDER BY CASE WHEN hub_id = 12 THEN 1 WHEN hub_id = 1 THEN 2 WHEN hub_id = 20 THEN 3 WHEN hub_id = 2 THEN 4 ... ELSE 123 END

更多推荐

按我的意愿在sql server中排序..

本文发布于:2023-11-22 05:21:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1616121.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:意愿   sql   server

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!