2016-04-27 37 views
1

你好,我试图写一个查询,它包括计算2个值的总和,第二个和是第一个值和另一个值之间的乘法结果。有人可以帮助解决这个问题吗? (请原谅我的英文,即时通讯开发者):connot执行一个聚合函数......与GROUP BY

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 
+0

您是否曾尝试将组添加到与您的非聚合列相同? GROUP BY ISNULL(CONVERT(VARCHAR,CONVERT(DATE,MARE_DAT_CRE,103)),'Total')WITH ROLLUP –

+0

我也使用GROUP BY和ROLLUP子句,但它没有显示 –

+0

是@RichBenner,但它没有显示在我的问题上: –

回答

0

您可以尝试在该连接中粘贴该子选择。现在你还没有使用表别名,所以我不确定哪些表包含字段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 
+0

谢谢@丰富的benner,我可以通过使用左加入来解决它,我很高兴^^谢谢 –

+0

高兴地帮助:)。如果这个答案已经为你排序,随时接受和upvote。 –

相关问题