2010-05-12 81 views
2

我想在sql server中对表进行排序。条件是我必须履行这是 我有了一些记录在像这样如何根据我的条件对某些字段进行排序的表

Select One 
None 
Child 
Old 
Neutral 
.. 
.. 
.. 

我希望它在选择一个这样的方式进行排序表上来,并没有谈到在年底剩余的按字母顺序排序。

Select One 
Child 
Neutral 
Old 
.. 
.. 
.. 
None 

是否有可能一些如何以任何有效的方式做到这一点。我还有其他几个领域也与之相关。代表这些我想获得这些价值。 这些字段是要填写组合框

我必须为12个表执行此操作。

回答

3

顺序尝试所使用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) 
+0

@KM:thx这个工作很完美。请问在这种情况下,按照 – 2010-05-12 13:45:40

+0

case的顺序描述它是如何工作的,case列返回一个表达式,当列为'Select One'时case返回整数1,当列为'none'时返回整数3,大小写的情况下,大小写返回整数2.然后,ORDER BY按两个值排序:CASE的值,然后是实际的列值,所以1 +'选择一个'行排序为顶部,2 + *任意列值*行在中间正确排序,3 +'无'排在最下面。 – 2010-05-12 13:49:29

+0

@KM:Thx它完美的工作,也是给予xplanation的thx。 – 2010-05-12 13:50:41

1

你可以一个序列字段添加到表 - 一个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 
+0

通过KM给出你接近的解决方案,但如果你理解我的Q值,那么你写的是完全不好的解决方案,因为这些字段将增长到n。 – 2010-05-13 04:02:30

+0

我明白你的意思了 - 我错过了KM正确地按字母排序 – Ray 2010-05-13 11:26:36

0

由于这些值将被用于某些选择,通常将这些值存储在它们自己的表中。

从你的问题我收集你已经这样做。

只需添加将定义排序顺序的另一个字段,然后您可以选择并按该字段排序。

有办法做到这一点没有额外的列(assumin字段名称是value

ORDER BY CASE value 
      WHEN 'None' THEN 'ZZZZZ' 
      WHEN 'Select One' THEN 'AAAAA' 
      ELSE values 
     END 

(更换'AAAAA''ZZZZZ'与域适当的常数),但我怀疑,这种做法将是任何在性能方面更好或易于实施/维护。

相关问题