SQL按列表排序

SQL按列表排序,sql,sql-server-2008,sql-order-by,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降序排列,然后按其余ID降序排列。这样的事情 ORDER BY field1 IN ('dynamic

我正在尝试为Microsoft sql Server 2008编写sql查询。下面是我的查询的一个快速示例

SELECT   DISTINCT(field1)
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
OR       ....lots of other conditions....
然后我想按动态列表中的ID降序排列,然后按其余ID降序排列。这样的事情

ORDER BY field1 IN ('dynamic list of ids') DESC, 
         field1 DESC
我怎样才能让ID首先出现在动态列表中

谢谢

编辑-在查询中添加了不同的内容

编辑-按照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
像这样的

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

您可以按以下顺序使用case语句:

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

您可以使用两个查询,一个带有动态ID,另一个带有其余ID。然后使用
UNION ALL
操作符将它们连接在一起。

试试@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

关于

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

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

尝试向
字段1
添加一个大数字:

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

您需要确保大数字大于
字段1中的任何数字

我确实想到了这一点,但我从来都不喜欢联合,所以我试图避免它+1以获得正确答案。
UNION
将使用列表检查重复项,您的意思是
UNION ALL
?是的,我的意思是UNION ALL-我已更改答案现在显示此错误“如果指定了select DISTINCT,则按项目排序必须出现在选择列表中”。现在显示此错误如果指定了select DISTINCT,则ORDER BY items必须出现在select列表中。您必须在select语句中包含该大小写表达式作为一列。例如:select*,case when change_request_id in('dynamic list of id'),然后0 else 1 end,change_request_id desc as orderingLogicColumn现在显示此错误如果指定了select DISTINCT,则ORDER BY items必须出现在select列表中。“您可能需要将查询包装到一个子select中,并将ORDER BY子句作为附加字段,然后在顶级查询中按该字段进行排序……现在显示此错误“如果指定了select DISTINCT,则ORDER BY items必须出现在select列表中。”