3

当我在 QoQ 冷融合中使用 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"}
);

所以为什么?谢谢你的帮助

4

1 回答 1

2

问题是您没有正确使用别名。

此示例查询产生相同的问题:

<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"}
        );
于 2019-09-12T12:10:21.230 回答