按数字和字符串属性的SQL顺序

时间:2013-01-28 09:41:10

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

我遇到的问题是通过包含数字和日期时间值的查询来关联订单,并且将对ASC进行排序,并且还具有需要按特定顺序从高到低排序的字符串值。我能够使用大小写在查询中对优先级本身进行排序,但不能为其他值添加任何其他条件。另一个问题是,在运行时决定选择订购的订单,这样订单就会改变。

单独排序优先级

SELECT [Task], [Start Date] AS Start_Date, [End Date] AS End_Date, [Priority], [Time Allowance] AS Time_Allowance, [Details] FROM [schedulerData0]
ORDER BY (CASE Priority
 WHEN 'Very High' Then 1  
 WHEN 'High' Then 2 
 WHEN 'Medium' Then 3 
 WHEN 'Low' Then 4 
 WHEN 'Very Low' Then 5
END)

尝试合并案例

SELECT [Task], [Start Date] AS Start_Date, [End Date] AS End_Date, [Priority], [Time Allowance] AS Time_Allowance, [Details] FROM [schedulerData0]
ORDER BY
-- numeric columns
CASE _orderby WHEN 'Time_Allowance' THEN Time_Allowance END ASC;
-- string columns
CASE _orderby Priority
 WHEN Priority = 'Very High' THEN 1,
 WHEN Priority = 'High' THEN 2,
 WHEN Priority = 'Medium' THEN 3,
 WHEN Priority = 'Low' THEN 4,
 WHEN Priority = 'Very Low' THEN 5;
-- datetime columns
CASE _orderby WHEN 'Start_Date' THEN Start_Date END ASC,
CASE _orderby WHEN 'End_Date' THEN End_Date END DESC;
END

目前在下面有声明,其中包含第一个第二个和第三个选择所述的属性。因为这会对所有数字数据进行排序,但按字母顺序排序优先级。

SELECT [Task], [Start Date] AS Start_Date, [End Date] AS End_Date, [Priority], [Time Allowance] AS Time_Allowance, [Details] FROM [schedulerData0] ORDER BY [" + firstSelect + "], [" + secondSelect + "], [" + thirdSelect + "]"

1 个答案:

答案 0 :(得分:0)

试试这个。

SELECT [Task], [Start Date] AS Start_Date, [End Date] AS End_Date, [Priority], [Time     Allowance] AS Time_Allowance, [Details] FROM [schedulerData0]
ORDER BY (CASE Priority
  WHEN 'Very High' Then 1  
  WHEN 'High' Then 2 
  WHEN 'Medium' Then 3 
  WHEN 'Low' Then 4 
  WHEN 'Very Low' Then 5
END), [Start Date] ASC, [End Date] DESC