我有一个表:TestTable,这个表只有一个字段:value,我插入相同的数据:
value
------------
ccc
aa
111
bbb
------------
我跑:
select * from TestTable
可以通过以下方式显示我的结果顺序:
ccc
aa
111
bbb
现在,我想得到这个结果DESC:
bbb
111
aa
ccc
如何创建这个sql?
select * from TestTable order by (by what?) DESC
告诉你!
答案 0 :(得分:4)
没有可以在订单声明中使用的自动“创建订单”标识符。您应该使用auto_increment
列来记录您的记录。然后,您可以按该列进行排序。
答案 1 :(得分:1)
听起来像是要使用自定义排序顺序排序。我想到了两种方法:1)将排序顺序放在表中并在查询中使用该表; 2)使用分隔的字符串(假设域中的值的数量很小,稳定且值相似且“窄”宽度)。
请原谅SQL Server语法但相当标准,希望你能得到一般的想法:
e.g。 1
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
),
MyDomainWithSortOrder (domain_col, sort_seq)
AS
(
SELECT ID, domain_col
FROM (
VALUES ('bbb', 1),
('111', 2),
('aa', 3),
('ccc', 4)
) AS MyDomainWithSortOrder (ID, domain_col)
)
SELECT T1.ID, T1.data_col, D1.sort_seq
FROM MyTable AS T1
INNER JOIN MyDomainWithSortOrder AS D1
ON T1.data_col = D1.domain_col
ORDER
BY sort_seq;
e.g。 2
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
)
SELECT ID, data_col
FROM MyTable
ORDER
BY CHARINDEX(CAST(data_col + ' ' AS CHAR(3)), 'bbb111aa ccc');
答案 2 :(得分:0)
这样的事情会起作用吗?
SELECT @rownum := @rownum +1 `rank`,
T.*
FROM TestTable T,
( SELECT @rownum :=0 ) T
ORDER BY `rank` DESC