Sql 在QoQ Coldfusion中使用have的两个额外列

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

当我在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"}
);

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"}
        );