2012-08-27 47 views
0

我正在处理将检索各种个人信息(包括名和姓)的查询。我想根据传入的参数(称为@p_Code)更改数据返回的顺序。当@p_Code是4时,我想以名字命名,然后命名。如果不是4,那么我想按姓氏排序,然后输入名字。在case语句中使用多个子句排序

我正在使用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

这应做到:

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