开发者

SQL Select fields with a value of 'Y' and order by date descending, then select all others and order by another field ascending

开发者 https://www.devze.com 2023-03-24 23:39 出处:网络
I am generating an SQL query: SELECT * FROM ToDoList WHERE ws_status <> \'Completed\' AND (user_id= \'TESTUSR\' OR ww_cover=\'TESTUSR\'

I am generating an SQL query:

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

And I need to list all resu开发者_开发知识库lts with wi_urgent set to 'Y' and order them by date Desc *first and then list all other results ordered by psc_alt_code descending* so I thought something like this would suffice:

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

I am getting SqlClient.SqlException: Incorrect syntax near '=' error when trying to run that query. Please note that I am querying an SQL View if that makes a difference?


You can use a case expression in the order by

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 


I don't think you can do wi_urgent = 'Y' in an ORDER BY.

Since you're looking for all results with wi_urgent, try adding it to the WHERE clause:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消