调整SQL查询以强制首先显示记录?

时间:2012-02-20 20:03:48

标签: sql sql-server sql-server-2008 select

如何调整以下查询以始终返回MemberID ='xxx'作为第一行的成员

SELECT * FROM Members

6 个答案:

答案 0 :(得分:12)

select * from Members
order by case when MemberID = XXX then 0 else 1 end

答案 1 :(得分:6)

这应该有效,它还允许您按MemberID订购剩余的项目(在本例中假设xxx = 12)

SELECT *
FROM Members
ORDER BY CASE WHEN MemberID=12 THEN NULL ELSE isnull(MemberID,0) END

如果memberID列不能包含空值,那么可以使用它可以稍微好一点。

SELECT *
FROM Members
ORDER BY CASE WHEN MemberID=12 THEN NULL ELSE MemberID END

答案 2 :(得分:0)

SELECT
  CASE WHEN MemberID = 'xxx' AS 1 ELSE 0 END CASE AS magic,
  *
FROM Members
ORDER BY magic DESC

语法可能因yr db而异,但我希望你明白这一点。

答案 3 :(得分:0)

SELECT * FROM `Members` WHERE `MemberID` = '[ID]' LIMIT 1 UNION SELECT * FROM `Members`

这应该有效。在我的数据库实例上测试过。选择的ID总是第一位。

答案 4 :(得分:0)

更强大的解决方案,如果您有多个记录必须浮动到顶部,或者您有多个记录的特定订单,则将ResultsOrder列添加到您的表,甚至是另一个表MemberOrder (memberid,resultorder)。用大数字填充结果序列......

Select m.*
From Members m
  Left Join MemberOrder mo on m.MemberID=mo.MemberID
Order by coalesce(mo.resultorder, 0) DESC

答案 5 :(得分:-1)

试试这个:

SELECT * FROM Members
ORDER BY IF(x.MemberId = XXX, -1, ABS(x.MemberId))