我正在使用MySQL数据库。我必须创建一个接受整数类型参数的存储过程。根据整数的值,我必须“排序”一个不同的值,如此..
**if(type == 1) than
order by Date Desc,
Quantity asc,
Amount asc
else if(type == 2)than
order by Date ASc,
Quantity asc,
Amount asc
else if(type == 3)than
order by
Quantity asc
Date desc,
Amount asc
然而,当我尝试这个时,我无法做到这一点,它也会给出错误。
答案 0 :(得分:2)
如果查看SELECT
的语法,您会发现ORDER BY
子句不能出现在CASE
语句中。
如果列是数字类型,则可以编写一个表达式,1表示升序,-1表示降序,并将表达式乘以列以进行排序,但这会影响性能,因为MySQL将无法使用任何索引进行排序。
SELECT ...
ORDER BY IF(?='d', -1, 1) * value
但一般情况下,您必须使用不同的语句来获得不同的排序。
答案 1 :(得分:1)
如果Date
是正确的date
或datetime
,您可以执行以下操作:
ORDER BY
CASE type WHEN 3 THEN -1 * Date ELSE Date END asc,
Quantity asc, Amount asc
http://dev.mysql.com/doc/refman/5.0/en/case-statement.html
这是有效的,因为date
,time
和其他MySQL日期和时间类型在内部存储为整数:
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
答案 2 :(得分:1)
我终于得到了解决方案......
SELECT distinct
order_detail.*, -(1)*CAST(order_detail.Date as unsigned) as lOrderDate,
from order_detail
order by
CASE
WHEN type = 1 THEN lOrderDate
WHEN type = 2 THEN order_detail.Date
WHEN type = 3 THEN order_detail.Quantity
END,
CASE
WHEN type = 1 THEN order_detail.Quantity
WHEN type = 2 THEN order_detail.Quantity
WHEN type = 3 THEN lOrderDate
END,
CASE
WHEN type = 1 THEN order_detail.Amount
WHEN type = 2 THEN order_detail.Amount
WHEN type = 3 THEN order_detail.Amount
END;
答案 3 :(得分:0)
两种方式: