我想在sql server中对表进行排序。我需要满足的条件是这个 我有一个表,其中有一些记录,如此
Select One
None
Child
Old
Neutral
..
..
..
我希望它的排序方式是Select One出现,None出现在最后,剩下的按字母顺序排序。
Select One
Child
Neutral
Old
..
..
..
None
是否有可能以任何有效的方式执行此操作。我还有其他一些与之相关的领域。代表这些我希望获得这些价值观。 这些字段将填入组合框
我必须为12张桌子做这件事。
答案 0 :(得分:3)
尝试在ORDER BY中使用CASE,如下所示:
SELECT...
ORDER BY CASE
WHEN YourColumn='Select One' then 1
WHEN YourColumn='none' then 3
ELSE 2
END,YourColumn
工作示例:
DECLARE @YourTable table (YourColumn varchar(20))
INSERT @YourTable VALUES ('Select One')
INSERT @YourTable VALUES ('None')
INSERT @YourTable VALUES ('Child')
INSERT @YourTable VALUES ('Old')
INSERT @YourTable VALUES ('Neutral')
SELECT * FROM @YourTable
ORDER BY CASE
WHEN YourColumn='Select One' then 1
WHEN YourColumn='none' then 3
ELSE 2
END,YourColumn
输出:
YourColumn
--------------------
Select One
Child
Neutral
Old
None
(5 row(s) affected)
答案 1 :(得分:1)
您可以在表格中添加一个序列字段 - 您可以在order by子句中使用的tinyint:
select field_name
from table_name
order by [sequence]
或者您可以使用case语句创建排序字段:
select field_name,
case field_name
when 'Select One' then 1
when 'Child' then 2
when 'Neutral' then 3
when...
end as sort_field
from table_name
order by sort_field
答案 2 :(得分:0)
由于这些是将用于某些选择的值,因此将这些值存储在自己的表中是很常见的。
从你的问题中我得知你已经在做那件事了。
只需添加另一个将定义排序顺序的字段,然后您就可以按该字段进行选择和排序。
有些方法可以在没有额外列的情况下执行此操作(假设字段名称为value
)
ORDER BY CASE value
WHEN 'None' THEN 'ZZZZZ'
WHEN 'Select One' THEN 'AAAAA'
ELSE values
END
(将[{1}}和'AAAAA'
替换为适合您域名的常量),但我怀疑这种方法在性能或易于实施/维护方面会更好。