我正在尝试为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
答案 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
中的任何数字。