SQLITE 带 CASE 的条件排序
SQLITE Conditional Order By with CASE
我想根据布尔值 paid
.
以不同的顺序订购 SQLITE 查询
查询在没有 case 语句的情况下工作。
due
列的类型 long
表示 unix 时间的日期。
使用以下查询,我收到以下错误:
extraneous input 'ELSE' expecting {, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}
SELECT transactions.* FROM transactions
ORDER BY
paid ASC,
CASE paid WHEN 0
THEN due DESC
ELSE due ASC
END,
date DESC, title ASC
谢谢!
您可以使用:
SELECT *
FROM transactions
ORDER BY
paid,
CASE paid WHEN true THEN -1.0*due ELSE due END,
date DESC,
title;
这个答案假定 due
是某种长时间戳,然后您预期的 ORDER BY
子句中的第二级排序应该首先放置较新的记录,当 paid
为真,当 paid
不为真时相反。
我想根据布尔值 paid
.
查询在没有 case 语句的情况下工作。
due
列的类型 long
表示 unix 时间的日期。
使用以下查询,我收到以下错误:
extraneous input 'ELSE' expecting {, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}
SELECT transactions.* FROM transactions
ORDER BY
paid ASC,
CASE paid WHEN 0
THEN due DESC
ELSE due ASC
END,
date DESC, title ASC
谢谢!
您可以使用:
SELECT *
FROM transactions
ORDER BY
paid,
CASE paid WHEN true THEN -1.0*due ELSE due END,
date DESC,
title;
这个答案假定 due
是某种长时间戳,然后您预期的 ORDER BY
子句中的第二级排序应该首先放置较新的记录,当 paid
为真,当 paid
不为真时相反。