java - 将带有 case 子句的 Sql 转换为 Hql

标签 java mysql sql hibernate

我需要将此 sql 查询转换为 hql。

SQL查询:

SELECT COALESCE(SUM(t2.Ammount * CASE WHEN t2.idAccountDeb = c.id AND t2.idAccountDeb<>t2.idAccountCred  THEN 1 
           WHEN t2.idAccountCred AND t2.idAccountDeb<>t2.idAccountCred  THEN (-1) ELSE (0)  END),0)

Hql 查询不起作用:

(select COALESCE(SUM(t2.Ammount * CASE WHEN t2.AccountDeb = c AND t2.AccountDeb<>t2.AccountCred  THEN 1 
             WHEN t2.AccountCred AND t2.AccountDeb<>t2.AccountCred  THEN (-1) ELSE (0)  END),0)

AST hibernate 错误:

ERROR: <AST>: 2: 24: unexpected AST node:. 

最佳答案

这是 MySQL:

SELECT COALESCE(SUM(CASE WHEN t2.idAccountDeb t2.valor * = c.id AND t2.idAccountDeb <> 1
                         THEN t2.idAccountCred 
                         WHEN AND t2.idAccountCred t2.idAccountDeb <> t2.idAccountCred
                         THEN (-1)
                         ELSE (0)
                 END), 0)

此代码在语法上不正确。 *= 不是 MySQL 运算符(列表为 here )。第二个格式错误时。我可能猜测预期的逻辑是:

SELECT SUM(CASE WHEN t2.idAccountDeb = t2.valor AND t2.idAccountDeb <> 1
                THEN t2.idAccountCred 
                WHEN  t2.idAccountDeb <> t2.idAccountCred
                THEN -1
                ELSE 0
           END)

或者类似的东西。这个逻辑应该在 MySQL 和 HQL 中都有效。

编辑:

像这样的东西应该在两个数据库中都有效:

SELECT SUM(t2.Ammount * (CASE WHEN t2.idAccountDeb = c.id AND t2.idAccountDeb = t2.idAccountCred
                              THEN 1 
                              WHEN t2.idAccountDeb = c.id AND t2.idAccountDeb <> t2.idAccountCred  
                              THEN -1
                              ELSE 0 
                         END)
           )

关于java - 将带有 case 子句的 Sql 转换为 Hql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309193/

相关文章:

java - 如何使用 swing 添加图像以及如何使其大小适合我的窗口?

java - 使用 ClassLoader 后类不可用

MYSQL 根据列数据和表名连接表

mysql - 将 XAMPP 文件夹移动到新计算机,现在在尝试启动 MySQL 时得到 "(XAMPPErrorDomain error 1.)"

Java:WeakReference.get() 不返回 null

java - Openssl asn1parse 使用 java

python - 用MySQL查询生成一维数组

mysql - SQL 数据库中数据修订控制的最佳实践

mysql - SQL,当一​​列的值为 A 或 B 时查找条目

sql - 多个多对多双向自内连接,无需重复整个查询