mysql - hql CASE WHEN 不能多次使用
问题描述
我需要在 hql 查询中为 order by 设置条件。
- 排序依据(列名)
- 排序顺序(升序或降序)
在我的 hql 查询中有 3 个表加入
select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN a.column3 WHEN :sortBy = column4 THEN b.column4 ELSE c.column5 END CASE WHEN :sortOrder = 'asc' THEN asc ELSE desc END
在此查询中,第二个CASE WHEN
条件出现错误
我也通过以下查询尝试过
select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN (CASE WHEN :sortOrder = 'asc' THEN 'a.column3 asc' ELSE 'a.column3 desc' END) WHEN :sortBy = column4 THEN (CASE WHEN :sortOrder = 'asc' THEN 'b.column4 asc' ELSE 'b.column4 desc' END) ELSE (CASE WHEN :sortOrder = 'asc' THEN 'c.column5 asc' ELSE 'c.column5 desc' END) END
在此查询中,响应未排序
你能指导我这个查询有什么问题吗?
解决方案
子句中的CASE
表达式ORDER BY
需要用逗号分隔。但是,您似乎希望能够根据参数选择排序方向:sortOrder
。一种方法是与生成升序和降序的CASE
表达式相乘。1.0
-1.0
SELECT a from TableA a, TableB b, TableC c
WHERE a.column1 = b.column2 AND b.column1 = c.column2
ORDER BY
(CASE WHEN :sortOrder = 'asc' THEN 1.0 ELSE -1.0 END) *
CASE WHEN :sortBy = column3 THEN a.column3
WHEN :sortBy = column4 THEN b.column4
ELSE c.column5 END;
推荐阅读
- c - 用 C 中的 __pairs 元方法迭代表的规范方法是什么?
- r - 将 1 添加到 R 中数据帧的特定字母数字行
- java - 如何在 Envers 中映射可选字段
- reactjs - 反应:npm i {any package} 没有创建声明文件
- javascript - 将焦点移至下一个输入元素
- odbc - 在 odbc 和 snowsql 中设置数据库大小?
- vb.net - 如何从 VB.NET 运行 DOS/CMD/命令提示符命令并希望将其终端输出保持几秒钟?
- ffmpeg - FFMPEG 裁剪边界动画
- sas - 基于其他几个列的总和列 - SAS
- ruby-on-rails - Rails:按合同设计/团队合作/功能依赖