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修改分页语句