在案例陈述中按超过子句排序

时间:2012-08-27 17:54:26

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

我正在查询将检索各种个人信息,包括名字和姓氏。我想根据传递的参数@p_Code更改返回数据的顺序。当@p_Code为4时,我想按名字和姓氏订购。如果它不是4,那么我想按姓氏排序,然后是名字。

我正在使用MS Sql。

以下是查询:

Select Last,
       First,
       Phone,
       Email
From Master.dbo.Cust
Order by
case @p_Code
     when '4' then
         ([First], [Last])
     else
         ([Last], [First])
end

2 个答案:

答案 0 :(得分:2)

这应该这样做:

DECLARE @p_Code VARCHAR(10)
SET @p_Code = '4'
Select [Last],
       [First],
       Phone,
       Email
From Master.dbo.Cust
Order by
case WHEN @p_Code = '4' THEN (RANK() OVER (ORDER BY [First], [Last]))
 ELSE (RANK() OVER (ORDER BY [Last],[First] )) END

答案 1 :(得分:0)

我没有方便的测试环境,但是这个怎么样:

Select Last,
       First,
       Phone,
       Email,
       (case @p_Code when '4' then [first] else [last] end) as key1,
       (case @p_Code when '4' then [last] else [first] end) as key2
From Master.dbo.Cust
Order by key1, key2