当我在 QoQ coldfusion 中使用 HAVING 时,返回的查询将有两个额外的列:“Column_7”和“Column_8”
这是我的代码
var qEffectifTemp = queryExecute("
SELECT CONVIVETYPELABEL,
SUM(EFFECTIFITEMVALEURPREVISIONNELLE) AS REPASPREVISIONNELLETOTAL,
SUM(EFFECTIFITEMVALEURSAISIE) AS REPASSAISIETOTAL,
OFFICENAME,
SATELLITENAME,
REPASTYPELABEL,
CUISINECENTRALENAME
FROM qEffectifsItemTemp
GROUP BY REPASTYPELABEL, SATELLITENAME, CONVIVETYPELABEL, OFFICENAME, CUISINECENTRALENAME
HAVING SUM(EFFECTIFITEMVALEURPREVISIONNELLE) <> SUM(EFFECTIFITEMVALEURSAISIE)", {}, {dbtype="query"}
);
那为什么呢?谢谢你的帮助
最佳答案
问题是您没有正确使用别名。
此示例查询产生相同的问题:
<cfquery name="childQuery" dbtype="query">
SELECT sum(age) as Total, lastname FROM parentQuery
GROUP BY id,lastname
HAVING sum(age) > 10
</cfquery>
在 HAVING 子句中使用别名(如以下查询)可解决问题:
<cfquery name="childQuery" dbtype="query">
SELECT sum(age) as Total, lastname FROM parentQuery
GROUP BY id,lastname
HAVING Total > 10
</cfquery>
您的问题是您已经为 sql 中的列创建了别名:
, SUM(EFFECTIFITEMVALEURPREVISIONNELLE) AS REPASPREVISIONNELLETOTAL
, SUM(EFFECTIFITEMVALEURSAISIE) AS REPASSAISIETOTAL
在 HAVING
子句中再次使用 SUM 会创建额外的列,例如 column_7
和 column_8
。相反,您应该使用别名:
HAVING REPASPREVISIONNELLETOTAL <> REPASSAISIETOTAL
因此您的完整查询应如下所示:
var qEffectifTemp = queryExecute("
SELECT CONVIVETYPELABEL,
SUM(EFFECTIFITEMVALEURPREVISIONNELLE) AS REPASPREVISIONNELLETOTAL,
SUM(EFFECTIFITEMVALEURSAISIE) AS REPASSAISIETOTAL,
OFFICENAME,
SATELLITENAME,
REPASTYPELABEL,
CUISINECENTRALENAME
FROM qEffectifsItemTemp
GROUP BY REPASTYPELABEL, SATELLITENAME, CONVIVETYPELABEL, OFFICENAME, CUISINECENTRALENAME
HAVING REPASPREVISIONNELLETOTAL <> REPASSAISIETOTAL", {}, {dbtype="query"}
);
关于sql - 在 QoQ Coldfusion 中使用 HAVING 的两个额外列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904499/