如何根据我的条件对某些字段进行排序的表
我想在sql server中对表进行排序。条件是我必须履行这是 我有了一些记录在像这样如何根据我的条件对某些字段进行排序的表
Select One
None
Child
Old
Neutral
..
..
..
我希望它在选择一个这样的方式进行排序表上来,并没有谈到在年底剩余的按字母顺序排序。
Select One
Child
Neutral
Old
..
..
..
None
是否有可能一些如何以任何有效的方式做到这一点。我还有其他几个领域也与之相关。代表这些我想获得这些价值。 这些字段是要填写组合框
我必须为12个表执行此操作。
顺序尝试所使用CASE BY这样的:
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
OUTPUT:
YourColumn
--------------------
Select One
Child
Neutral
Old
None
(5 row(s) affected)
你可以一个序列字段添加到表 - 一个TINYINT,你可以在ORDER BY子句中使用:
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
通过KM给出你接近的解决方案,但如果你理解我的Q值,那么你写的是完全不好的解决方案,因为这些字段将增长到n。 – 2010-05-13 04:02:30
我明白你的意思了 - 我错过了KM正确地按字母排序 – Ray 2010-05-13 11:26:36
由于这些值将被用于某些选择,通常将这些值存储在它们自己的表中。
从你的问题我收集你已经这样做。
只需添加将定义排序顺序的另一个字段,然后您可以选择并按该字段排序。
有办法做到这一点没有额外的列(assumin字段名称是value
)
ORDER BY CASE value
WHEN 'None' THEN 'ZZZZZ'
WHEN 'Select One' THEN 'AAAAA'
ELSE values
END
(更换'AAAAA'
和'ZZZZZ'
与域适当的常数),但我怀疑,这种做法将是任何在性能方面更好或易于实施/维护。
@KM:thx这个工作很完美。请问在这种情况下,按照 – 2010-05-12 13:45:40
case的顺序描述它是如何工作的,case列返回一个表达式,当列为'Select One'时case返回整数1,当列为'none'时返回整数3,大小写的情况下,大小写返回整数2.然后,ORDER BY按两个值排序:CASE的值,然后是实际的列值,所以1 +'选择一个'行排序为顶部,2 + *任意列值*行在中间正确排序,3 +'无'排在最下面。 – 2010-05-12 13:49:29
@KM:Thx它完美的工作,也是给予xplanation的thx。 – 2010-05-12 13:50:41