Informix SQL — CASE 语句中的错误

Posted

技术标签:

【中文标题】Informix SQL — CASE 语句中的错误【英文标题】:Informix SQL — error in CASE statement 【发布时间】:2013-11-20 03:52:04 【问题描述】:

我对 Informix SQL 语法有疑问。

这是我的 SQL 语法

sql = "SELECT MONTH(startdatetime) MONTH, COUNT(sessionid) TotalCallsOffered, "+

      " CASE" +
      " WHEN MONTH(startdatetime) = 5" +
      " THEN 'SUSUKUDA' " +
      " END " +

      "FROM agentconnectiondetail a WHERE MONTH(startdatetime) = 5 " +
      "GROUP BY 1 ORDER BY 1 ASC";

输出是

ERROR [HY000] [Informix][Informix ODBC Driver][Informix] The column ((expression))
must be in the GROUP BY list.

我必须做什么?

【问题讨论】:

嗨,Harits,如果乔纳森的回答给了你找到正确解决方案的方法,请检查他们的回答是否正确......或者你自己发布答案并检查......(你也可以这样做)。把这个问题的答案放在stackexchange的非标准... 【参考方案1】:

Informix 遵循严格的 SQL 标准,并要求选择列表中的所有非聚合值都列在 GROUP BY 子句中。因此,SQL 必须如下所示:

SELECT MONTH(startdatetime) AS Month, COUNT(sessionid) AS TotalCallsOffered,
       CASE
       WHEN MONTH(startdatetime) = 5
       THEN 'SUSUKUDA'
       END AS Susukuda
  FROM agentconnectiondetail
 WHERE MONTH(startdatetime) = 5
 GROUP BY Month, Susukuda
 ORDER BY Month ASC

我选择用 AS 命名所有三列,并按这些名称分组(以及按它们排序)。

【讨论】:

【参考方案2】:

我的问题解决了

SELECT MONTH(startdatetime) AS Month, COUNT(sessionid) AS TotalCallsOffered,
       CASE
       WHEN MONTH(startdatetime) = 5
       THEN 'SUSUKUDA'
       END AS Susukuda
  FROM agentconnectiondetail
 WHERE MONTH(startdatetime) = 5
 GROUP BY 1, 3
 ORDER BY 1

【讨论】:

如果你经常这样做,你会不受欢迎。您的“接受”自我回答实际上与之前接受的答案相同(您在 GROUP BY 和 ORDER BY 列中使用了数字而不是名称),但没有解释为什么您改变了对正确答案的看法。

以上是关于Informix SQL — CASE 语句中的错误的主要内容,如果未能解决你的问题,请参考以下文章

gbase(Informix) pageHelper修改分页语句

gbase(Informix) pageHelper修改分页语句

Informix 数据库中的 Hibernate 批量插入(获取 sql 日志跟踪)

Informix 11.5 SQL 语句性能监控方法及实现

sql中的case语句对齐和清理

informix 中update 前2条记录的 SQL语句