2014-11-17 132 views
1

我想问一下,如果我能“按订单”实现一个查询,而无需使用工会:SQL,多种排序顺序

first_order = column1 != column2; 
seconder_order = column1 = column2; 
third_order = column is null; 

前。 select * from table_A order by first_order , seconder_order , third_order

但是,当我尝试这个不工作。

即时消息试图做的是显示在我的表上与此列表first_order然后second_order和最后third_order。我没有专家在SQL。希望你能帮助我在这..先谢谢了!

+0

解释什么是不工作。你一定可以按多列排序。 – Robbert

+0

我上面的例子返回的列表与third_oreder多数民众赞成column2为空。 – edmund

回答

2

如果你使用MySQL,尝试:

ORDER BY (CASE 
    WHEN column1 != column2 THEN 0 
    WHEN column1 = column2 THEN 1 
    WHEN column is null  THEN 2 
    ELSE 3 
END) ASC; 
+0

感谢您的快速回复。但即时通讯尝试使用您的查询,但即时通讯出现错误。 错误代码:1064 您的SQL语法有错误;检查与你的MySQL服务器版本相对应的手册,在'CASE'附近使用正确的语法。ASC LIMIT 0,1000' – edmund

+0

@edmund:我相信正确的语法使用'CASE ... END'而不是'CASE ... END CASE'。 –

+0

是的! @乔纳森你也正确!在搜索如何在mysql中使用CASE之后,我终于无误地运行了这个查询,并实现了即时消息的尝试。我只是在END CASE上删除CASE。非常感谢你turutosiya!这真太了不起了! – edmund