Sql 在QoQ Coldfusion中使用have的两个额外列
当我在QoQ coldfusion中使用HAVING时,返回的查询将有两个额外的列:“column_7”和“column_8” 原始结果 和带有两个额外列的结果 这是我的密码Sql 在QoQ Coldfusion中使用have的两个额外列,sql,coldfusion,having,qoq,Sql,Coldfusion,Having,Qoq,当我在QoQ coldfusion中使用HAVING时,返回的查询将有两个额外的列:“column_7”和“column_8” 原始结果 和带有两个额外列的结果 这是我的密码 var qEffectifTemp = queryExecute(" SELECT CONVIVETYPELABEL, SUM(EFFECTIFITEMVALEURPREVISIONNELLE) AS REPASPREVISIONNELLETOTAL, SUM(EFFECTIFITEMVALEUR
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"}
);
var qEffectifTemp=queryExecute(“
选择CONVIVETYPELABEL,
总和(有效项目值)为修理修正总金额,
总计(有效项目价值)作为再评估总计,
官名,
卫星名称,
REPASTYPELABEL,
菜名
从qEffectifsItemTemp
按RepapyPelabel、SatelliteneName、CONVIVETYPELABEL、OFFICENAME、CuisineCentralName分组
具有SUM(effectifitemvaleurprovisionnelle)SUM(effectifitemvaleursaiie)”,{},{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
子句中再次使用总和会创建额外的列,如column_7
和column_8
。相反,您应该使用别名:
HAVING REPASPREVISIONNELLETOTAL <> REPASSAISIETOTAL
具有REPASPREVISIONNELLETOTAL RepasAssetTotal
因此,您的完整查询应如下所示:
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"}
);
var qEffectifTemp=queryExecute(“
选择CONVIVETYPELABEL,
总和(有效项目值)为修理修正总金额,
总计(有效项目价值)作为再评估总计,
官名,
卫星名称,
REPASTYPELABEL,
菜名
从qEffectifsItemTemp
按RepapyPelabel、SatelliteneName、CONVIVETYPELABEL、OFFICENAME、CuisineCentralName分组
有REPASPREVISIONNELLETOTAL repassaisetotal“,{},{dbtype=“query”}
);
如果您使用having子句中select子句的别名,您的查询是否会执行?您的两个未命名列很可能是因为您的having子句中有两个无别名的sum()
s。他们造成了问题吗?此外,这里是否需要QoQ?通常情况下,QoQ所做的事情可以在原始查询中完成。您的基表是什么风格和版本的SQL?那张桌子上有多少行?是的@Shawn。问题的原因仅在别名中。请看下面我的答案。我已经解释了问题的根本原因。我通常认为,如果QoQ可以避免,那么应该避免。根据我的经验,QoQ通常用于以编程方式解决查询,而不是在数据库中。我不知道这个应用程序,所以我不能说这里是否需要QoQ,但我仍然说QoQ不一致的“SQL”会导致一些坏习惯或混乱的结果。在大多数主要类型的SQL(MySQL/Maria和SQLLite除外)中,HAVING
子句中没有别名。因此,这种习惯很容易导致问题,即为什么相同的模式在基本查询中不起作用。
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"}
);