在 QoQ Coldfusion 中使用 HAVING 的两个额外列
Two extra columns with using HAVING in QoQ Coldfusion
当我在 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"}
);
当我在 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"}
);