SQL按顺序排序

时间:2011-03-09 05:03:59

标签: sql sql-server-2008 sql-order-by

我正在尝试为Microsoft SQL Server 2008编写SQL查询。以下是我查询的快速示例。

SELECT   DISTINCT(field1)
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
OR       ....lots of other conditions....

然后我想按动态列表中的那些ID降序排序,然后其余的降序。有这样的效果。

ORDER BY field1 IN ('dynamic list of ids') DESC, 
         field1 DESC

我如何能够首先在动态列表中拥有ID?

由于

编辑 - 添加了DISTINCT进行查询。

编辑 - 答案由Shan Plourde提供。

SELECT   DISTINCT(field1),
         CASE 
           WHEN field1 IN ('dynamic list of ids') THEN 1
           ELSE 0
         END AS logicalOrderingColumn
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
OR       ....lots of other conditions....
ORDER BY logicalOrderingColumn DESC, field1 DESC

6 个答案:

答案 0 :(得分:2)

这样的事情?

order by case when change_request_id in ('dynamic list of ids') then 0 else 1 end, 
      change_request_id desc 

答案 1 :(得分:2)

您可以按顺序使用案例陈述:

ORDER BY case when field1 IN ('dynamic list of ids') then 1 else 0 end DESC,  field1 DESC

答案 2 :(得分:2)

您可以使用两个查询,一个包含动态ID,另一个包含其余查询。然后使用UNION ALL运算符将它们连接在一起。

答案 3 :(得分:2)

试试这个@Heming说。

SELECT   *
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
order by Field1 DESC
UNION ALL
SELECT   *
FROM     myDatabase
WHERE    field1 NOT IN ('dynamic list of ids')
order by Field1 DESC

此致

答案 4 :(得分:2)

我假设您想按字段1在id的动态列表中的最大数字排序,然后按字段1降序排序。

ORDER BY CASE WHEN field1 IN ('dynamic list of ids') THEN field1 ELSE 0 END DESC, 
         field1 DESC

答案 5 :(得分:2)

尝试向field1添加一个大号:

ORDER BY case when field1 IN ('dynamic list of ids') then 1000000 + field1 else field1 end DESC

您需要确保较大的数字大于field1中的任何数字。