SQL选择值为“Y”的字段并按日期降序排序,然后选择所有其他字段并按其他字段升序排序

时间:2011-08-04 08:23:17

标签: asp.net sql sql-order-by

我正在生成一个SQL查询:

SELECT * FROM ToDoList 
WHERE ws_status <> 'Completed' 
AND (user_id= 'TESTUSR' OR ww_cover='TESTUSR' 
OR (ws_status = 'Orphan' AND wwt_workgroupid IN (108))) 
**ORDER BY psc_alt_code ASC**

我需要列出wi_urgent设置为'Y'的所有结果,并按日期排序描述 *首先排序所有其他结果按psc_alt_code降序* 排序所以我认为这样的事情会足够了:

ORDER BY (wi_urgent = 'Y') DESC, psc_alt_code ASC

尝试运行该查询时出现SqlClient.SqlException: Incorrect syntax near '='错误。请注意,如果这有所不同,我正在查询SQL视图?

2 个答案:

答案 0 :(得分:2)

我认为你不能在ORDER BY中做wi_urgent = 'Y'

由于您正在使用wi_urgent查找所有结果,请尝试将其添加到WHERE子句中:

SELECT * FROM ToDoList 
WHERE ws_status <> 'Completed' 
      AND (user_id= 'TESTUSR' OR ww_cover='TESTUSR' 
           OR (ws_status = 'Orphan' AND wwt_workgroupid IN (108)))
      AND wi_urgent = 'Y'
ORDER BY wi_urgent DESC,
         psc_alt_code ASC

答案 1 :(得分:2)

您可以按顺序使用案例表达式

SELECT * FROM ToDoList 
WHERE ws_status <> 'Completed' 
AND (user_id= 'TESTUSR' OR ww_cover='TESTUSR' 
OR (ws_status = 'Orphan' AND wwt_workgroupid IN (108))) 
ORDER BY CASE WHEN wi_urgent = 'Y' THEN 0 ELSE 1 END ASC
,psc_alt_code