【问题标题】:connot perform an aggregate function ... with GROUP BY无法使用 GROUP BY 执行聚合函数...
【发布时间】:2016-08-21 12:13:41
【问题描述】:

您好,我正在尝试编写一个查询,该查询包括计算 2 个值的总和,第二个总和是第一个值与另一个值相乘的结果。有人可以帮忙解决这个问题吗? (对不起我的英语,我是法语开发人员):

    SELECT ISNULL(CONVERT(VARCHAR,CONVERT(date,MARE_DAT_CRE,103)),'Total') AS Dat
       , SUM  (MARE_CAUTIONNEMENT) AS HT
       ,  SUM ( MARE_CAUTIONNEMENT * ( SELECT DISTINCT LCF_TAUXTVA 
            FROM F_LIGNECOMFOU 
            INNER JOIN F_AFFAIRES ON LCF_CODE_AFF = AF_CODE_AFFAIRE 
            INNER JOIN F_LOT ON LT_AFFAIRE = AF_CODE_AFFAIRE
            INNER JOIN F_COMMANDEFOU ON CF_NUMERO = LCF_CF_NUMERO
            INNER JOIN F_P_FOURNISSEUR ON CF_IDENT_FO = FOU_IDENT
            WHERE AF_CODE_AFFAIRE = '15065-00' AND LT_IDENT =  500002200 AND FOU_IDENT = 500000838 ) ) FROM F_AVENANT_RETENUE INNER JOIN F_MARCHE_AVENANT ON MAAV_IDENT = MARE_MAAV_IDENT INNER JOIN F_MARCHE_TRAVAUX ON MATR_IDENT = MAAV_MATR_IDENT INNER JOIN F_AFFAIRES ON AF_CODE_AFFAIRE = MATR_AF_IDENT INNER JOIN F_LOT ON LT_AFFAIRE  = AF_CODE_AFFAIRE INNER JOIN F_AVENANT_COTATION ON AVCO_IDENT = MARE_AVCO_IDENT WHERE AF_CODE_AFFAIRE = '15065-00' AND LT_IDENT =  500002200 AND MATR_FOU_IDENT = 500000838 AND MARE_CAUTIONNEMENT IS NOT NULL
GROUP BY MARE_DAT_CRE WITH ROLLUP  

【问题讨论】:

  • 您是否尝试将 group by 添加到与您的非聚合列相同的位置? GROUP BY ISNULL(CONVERT(VARCHAR, CONVERT(DATE, MARE_DAT_CRE, 103)), 'Total') WITH ROLLUP
  • 我也使用了带有 ROLLUP 子句的 GROUP BY 但它没有显示
  • 是的@RichBenner,但我的问题没有显示:
  • 按 MARE_DAT_CRE 与 ROLLUP 分组
  • 尝试将 ',SUM(MARE_CAUTIONNEMENT * (SELECT DISTINCT LCF_TAUXTVA' 更改为此 ',SUM(MARE_CAUTIONNEMENT) * SUM(SELECT DISTINCT LCF_TAUXTVA'。您将需要一个右括号在 SUM 末尾删除

标签: sql sql-server database join subquery


【解决方案1】:

您可以尝试在您的联接中粘贴该子选择。现在您还没有使用表别名,所以我不确定哪些表包含字段 AF_CODE_AFFAIRE、LT_IDENT 和 MATR_FOU_IDENT,因此您必须添加表别名;

SELECT ISNULL(CONVERT(VARCHAR, CONVERT(DATE, MARE_DAT_CRE, 103)), 'Total') AS Dat
    ,SUM(MARE_CAUTIONNEMENT) AS HT
    ,SUM(MARE_CAUTIONNEMENT) * SUM(new.LCF_TAUXTVA)
FROM F_AVENANT_RETENUE
INNER JOIN F_MARCHE_AVENANT ON MAAV_IDENT = MARE_MAAV_IDENT
INNER JOIN F_MARCHE_TRAVAUX ON MATR_IDENT = MAAV_MATR_IDENT
INNER JOIN F_AFFAIRES ON AF_CODE_AFFAIRE = MATR_AF_IDENT
INNER JOIN F_LOT ON LT_AFFAIRE = AF_CODE_AFFAIRE
INNER JOIN F_AVENANT_COTATION ON AVCO_IDENT = MARE_AVCO_IDENT
LEFT JOIN (
    SELECT DISTINCT LCF_TAUXTVA
    FROM F_LIGNECOMFOU
    INNER JOIN F_AFFAIRES ON LCF_CODE_AFF = AF_CODE_AFFAIRE
    INNER JOIN F_LOT ON LT_AFFAIRE = AF_CODE_AFFAIRE
    INNER JOIN F_COMMANDEFOU ON CF_NUMERO = LCF_CF_NUMERO
    INNER JOIN F_P_FOURNISSEUR ON CF_IDENT_FO = FOU_IDENT
    ) new ON AF_CODE_AFFAIRE = new.AF_CODE_AFFAIRE
    AND LT_IDENT = new.LT_IDENT
    AND MATR_FOU_IDENT = new.MATR_FOU_IDENT
WHERE AF_CODE_AFFAIRE = '15065-00'
    AND LT_IDENT = 500002200
    AND MATR_FOU_IDENT = 500000838
    AND MARE_CAUTIONNEMENT IS NOT NULL
GROUP BY ISNULL(CONVERT(VARCHAR, CONVERT(DATE, MARE_DAT_CRE, 103)), 'Total')
WITH ROLLUP

【讨论】:

  • 谢谢@rich benner,我可以用左连接解决它,我很高兴^^谢谢
  • 很高兴为您提供帮助 :)。如果此答案已为您排序,请随时接受并投票。
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 2022-10-25
相关资源
最近更新 更多