SqlServer中的排序问题

嗯哼a 2016-12-29 02:40:49
我有一个列,里面是4,5,6,7,8,9,10,11,12,1,2,3,0,-1,-2,-3,-4
如何查询显示的时候排列为4,5,6,-1,7,8,9,-2,10,11,12,-3,1,2,3-4,0这种样子
...全文
357 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-12-29
  • 打赏
  • 举报
回复
如:同一个表没条件要改变表的顺序,直接加多1列用于排序 如果顺序让程序传照方法:#7
中国风 2016-12-29
  • 打赏
  • 举报
回复
根据条件显示顺序 e.g.
DECLARE @str VARCHAR(max)='4,5,6,-1,7,8,9,-2,10,11,12,-3,1,2,3-4,0'
SELECT * FROM table1 WHERE CHARINDEX(','+RTRIM(ID)+',',@str)>0  ORDER BY CHARINDEX(','+RTRIM(ID)+',',','+@str+',') 
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
/* 测试数据
WITH t(col1,col2) AS (
    SELECT 4,'A' UNION ALL
    SELECT 5,'B' UNION ALL
    SELECT 6,'C' UNION ALL
    SELECT 7,'D' UNION ALL
    SELECT 8,'E' UNION ALL
    SELECT 9,'F' UNION ALL
    SELECT 10,'G' UNION ALL
    SELECT 11,'H' UNION ALL
    SELECT 12,'I' UNION ALL
    SELECT 1,'J' UNION ALL
    SELECT 2,'K' UNION ALL
    SELECT 3,'L' UNION ALL
    SELECT 0,'M' UNION ALL
    SELECT -1,'N' UNION ALL
    SELECT -2,'O' UNION ALL
    SELECT -3,'P' UNION ALL
    SELECT -4,'Q'
)
SELECT * INTO table1 FROM t
 */
 
-- 查询
;WITH a(col1,sort) AS (
    SELECT 4,1 UNION ALL
    SELECT 5,2 UNION ALL
    SELECT 6,3 UNION ALL
    SELECT -1,4 UNION ALL
    SELECT 7,5 UNION ALL
    SELECT 8,6 UNION ALL
    SELECT 9,7 UNION ALL
    SELECT -2,8 UNION ALL
    SELECT 10,9 UNION ALL
    SELECT 11,10 UNION ALL
    SELECT 12,11 UNION ALL
    SELECT -3,12 UNION ALL
    SELECT 1,13 UNION ALL
    SELECT 2,14 UNION ALL
    SELECT 3,15 UNION ALL
    SELECT -4,16 UNION ALL
    SELECT 0,17
)
    SELECT table1.*
      FROM table1
      JOIN a
        ON table1.col1 = a.col1
  ORDER BY a.sort
       col1 col2
----------- ----
          4 A
          5 B
          6 C
         -1 N
          7 D
          8 E
          9 F
         -2 O
         10 G
         11 H
         12 I
         -3 P
          1 J
          2 K
          3 L
         -4 Q
          0 M
保证正确
你这 。。。高啊 实在是高
卖水果的net 2016-12-29
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
保证正确
Tiger_Zhao 2016-12-29
  • 打赏
  • 举报
回复
/* 测试数据
WITH t(col1,col2) AS (
SELECT 4,'A' UNION ALL
SELECT 5,'B' UNION ALL
SELECT 6,'C' UNION ALL
SELECT 7,'D' UNION ALL
SELECT 8,'E' UNION ALL
SELECT 9,'F' UNION ALL
SELECT 10,'G' UNION ALL
SELECT 11,'H' UNION ALL
SELECT 12,'I' UNION ALL
SELECT 1,'J' UNION ALL
SELECT 2,'K' UNION ALL
SELECT 3,'L' UNION ALL
SELECT 0,'M' UNION ALL
SELECT -1,'N' UNION ALL
SELECT -2,'O' UNION ALL
SELECT -3,'P' UNION ALL
SELECT -4,'Q'
)
SELECT * INTO table1 FROM t
*/

-- 查询
;WITH a(col1,sort) AS (
SELECT 4,1 UNION ALL
SELECT 5,2 UNION ALL
SELECT 6,3 UNION ALL
SELECT -1,4 UNION ALL
SELECT 7,5 UNION ALL
SELECT 8,6 UNION ALL
SELECT 9,7 UNION ALL
SELECT -2,8 UNION ALL
SELECT 10,9 UNION ALL
SELECT 11,10 UNION ALL
SELECT 12,11 UNION ALL
SELECT -3,12 UNION ALL
SELECT 1,13 UNION ALL
SELECT 2,14 UNION ALL
SELECT 3,15 UNION ALL
SELECT -4,16 UNION ALL
SELECT 0,17
)
SELECT table1.*
FROM table1
JOIN a
ON table1.col1 = a.col1
ORDER BY a.sort

       col1 col2
----------- ----
4 A
5 B
6 C
-1 N
7 D
8 E
9 F
-2 O
10 G
11 H
12 I
-3 P
1 J
2 K
3 L
-4 Q
0 M

保证正确
  • 打赏
  • 举报
回复
有规律吗? 前面一个负数跟3个正数,然后负数-1前面的max(正数+1)三个 这种吗?
卖水果的net 2016-12-29
  • 打赏
  • 举报
回复
没看出什么规律来? 还是说就按这几个数值写死?
嗯哼a 2016-12-29
  • 打赏
  • 举报
回复
求大神呀。。。。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧