1

这是一个简化的任务,我必须在实际项目中解决。在这个项目中,数据存储在 HSQLDB 中。使用 JDBC 访问数据。

我有一张桌子:

name | flag
-----------
aa   | 1
bb   | 0
cc   | 1
dd   | 0
ee   | 1
ff   | 0

我需要编写查询以获取下表:

name | flag
-----------
aa   | 1
cc   | 1
ee   | 1
ff   | 0
dd   | 0
bb   | 0

最终表就像标志 = 1 的行被采用并按升序排序,标志 = 0 的行被采用并按降序排列,结果一个接一个地组合在一起。

请注意,标志 = 1 的行和标志 = 0 的行具有相反的排序顺序。

可以用 SQL 做吗?我不想在 Java 代码中手动进行两个查询和合并结果集。

4

3 回答 3

3

在任何 SQL 中,只有最外层的 order by 应用,所以它必须在那里完成。

我不知道这是否适用于您的 SQL 方言(并且无法检查抱歉),但您可以这样做

SELECT name, flag
FROM  'table'
ORDER BY
    flag desc,
    CASE WHEN flag = 1 THEN name ELSE '' END,
    CASE WHEN flag = 0 THEN name ELSE '' END DESC
于 2010-03-07T15:56:14.517 回答
2

试试这个:

SELECT name, flag
FROM 'table'
ORDER BY flag desc, name

尽可能让数据库完成工作。不要在 Java 中做这样的事情。想想“SQL优先”。

于 2010-03-07T15:10:24.127 回答
1

order by可以多于一列:

select *
from table
order by flag desc, name asc
于 2010-03-07T15:11:15.167 回答