【发布时间】:2014-06-21 03:36:54
【问题描述】:
我想不按 asc 或 desc 对列进行排序,但我希望它按照我设置的顺序排序。例如我有这个数据:
Varchar1 | Varchar2 | Value | Something
1401_1 | 1401_1_9 | 1 | Something1
1401_1 | 1401_1_9 | 0 | Something2
1401_1 | 1401_1_11 | 1 | Something1
1401_1 | 1401_1_11 | 1 | Something2
1401_1 | 1401_1_13 | 0 | Something1
1401_1 | 1401_1_13 | 1 | Something2
1401_1 | 1401_1_15 | 0 | Something1
1401_1 | 1401_1_15 | 1 | Something2
1401_1 | 1401_1_17 | 1 | Something1
1401_1 | 1401_1_17 | 0 | Something2
1401_1 | 1401_1_19 | 1 | Something1
1401_1 | 1401_1_19 | 0 | Something2
1401_1 | 1401_1_21 | 1 | Something1
1401_1 | 1401_1_21 | 1 | Something2
1401_1 | 1401_1_23 | 0 | Something1
1401_1 | 1401_1_23 | 1 | Something2
1401_1 | 1401_1_1 | 0 | Something1
1401_1 | 1401_1_1 | 1 | Something2
1401_1 | 1401_1_3 | 1 | Something1
1401_1 | 1401_1_3 | 0 | Something2
1401_1 | 1401_1_5 | 1 | Something1
1401_1 | 1401_1_5 | 0 | Something2
1401_1 | 1401_1_7 | 1 | Something1
1401_1 | 1401_1_7 | 1 | Something2
这是我的代码:
SELECT *
FROM (SELECT TOP 12
[varchar2] AS [T2],
SUM(CASE WHEN [Type] = 'something1' THEN value END) AS something1,
SUM(CASE WHEN [Type] = 'something2' THEN value END) AS [something2]
FROM tbl_table
GROUP by [varchar2]
ORDER by [varchar2] DESC)x
ORDER BY [T2] ASC
该代码产生如下内容:1401_1_1、1401_1_11、1401_1_13、1401_1_15、1401_1_17、 1401_1_19, 1401_1_21, 1401_1_23, 1401_1_3, 1401_1_5, 1401_1_7, 1401_1_9 ==> 它在 varchar 中排序
我希望它按照这个顺序排序:1401_1_9, 1401_1_11, 1401_1_13, 1401_1_15, 1401_1_17, 1401_1_19, 1401_1_21, 1401_1_23, 1401_1_1, 1401_1_1, 1401_1_3, 1401_1_5_1_3, 01_1_7
有可能吗?
【问题讨论】:
-
第二个和第三个数字不能补零吗,例如 1401_01_01、1401_01_09 等?
-
添加一个订单列,按照您想要的顺序设置它,然后按此对结果进行排序。
-
@intracept 感谢您的建议,但我认为它仍然按照我想要的顺序执行,例如:01、03、05、07...。我希望它是:09, 11, ......, 01, 03.... 类似的东西。
-
@dbugger 感谢 dbugger 的建议。我先试试看。
标签: c# asp.net sql sql-server vb.net