2016-04-27 2 views
1

Здравствуйте, я пытаюсь написать запрос, который состоит в вычислении суммы двух значений, вторая сумма является результатом умножения между первым значением и другим. может кто-то помочь решить это пожалуйста ?? (Простите за мой английский, им разработчика Frensh):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

Спасибо @rich benner, я мог бы решить его, используя левое соединение, im so happy ^^ спасибо –

+0

рад помочь :). если этот ответ отсортировал его для вас, не стесняйтесь принимать и продвигать. –

Смежные вопросы