2017-07-17 98 views
0

我希望能够根据所选参数使用不同列进行排序。 我可以得到它的单列工作,但挣扎与多个。 任何帮助将不胜感激。按条件和多个排序列或其他条件排序

ORDER BY 
CASE WHEN @a like '%apples%' or @a like '%onions%' then 
DeliveryScheduleItems.DropSequence, 
DeliveryAddresses.PostalCode, 
Customers.CustomerId 
Else 
DeliverySchedules.DeliveryDate, 
DeliveryAddresses.PostalCode, 
Customers.CustomerId 
End 

回答

0

试试这个,

ORDER BY 
CASE 
WHEN @a like '%apples%' or @a like '%onions%' then 
DeliveryScheduleItems.DropSequence, 
DeliveryAddresses.PostalCode, 
Customers.CustomerId 
WHEN @a not like '%apples%' AND @a not like '%onions%' then 
DeliverySchedules.DeliveryDate, 
DeliveryAddresses.PostalCode, 
Customers.CustomerId 
End 
+0

非常感谢您的回复,这适用于单个排序列,但不适用于多个列。 ','附近语法不正确 – jaybee

0

您需要多个条件:

ORDER BY (CASE WHEN @a like '%apples%' or @a like '%onions%' 
       THEN DeliveryScheduleItems.DropSequence 
      END), 
     (CASE WHEN @a like '%apples%' or @a like '%onions%' 
       THEN NULL 
       ELSE DeliverySchedules.DeliveryDate 
      END), 
     DeliveryAddresses.PostalCode, 
     Customers.CustomerId 

注意使用两个CASE表现为两个不同的列。据推测,DeliveryDateDropSequence有不同的类型。最好单独订购。