如何根据我的条件对包含某些字段的表进行排序

时间:2010-05-12 13:26:31

标签: sql-server-2005 tsql sql

我想在sql server中对表进行排序。我需要满足的条件是这个 我有一个表,其中有一些记录,如此

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

我希望它的排序方式是Select One出现,None出现在最后,剩下的按字母顺序排序。

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

是否有可能以任何有效的方式执行此操作。我还有其他一些与之相关的领域。代表这些我希望获得这些价值观。 这些字段将填入组合框

我必须为12张桌子做这件事。

3 个答案:

答案 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'替换为适合您域名的常量),但我怀疑这种方法在性能或易于实施/维护方面会更好。