簡體   English   中英

錯誤:無法在用於分組依據列表的表達式中使用聚合或子查詢

[英]Error: Cannot use an aggregate or a subquery in an expression used for the group by list

我收到此錯誤:無法在用於GROUP BY子句的group by列表的表達式中使用聚合或子查詢。

我在互聯網上進行搜索,但不知道如何對我的情況進行更正。 我只發現了不同類型的查詢。

我試圖在一個字段(第5行)中獲得一個Count結果,但是當我添加Count查詢時卻遇到了此錯誤。

我正在使用SQL SERVER 2008 R2。

當我從SELECT和GROUP BY中刪除Count時,查詢將正確運行。

SELECT TF.COD_FORNECEDOR AS 'Cód. Fornec.',
    TF.NOM_FANTASIA AS 'Fornecedor',
    DM.COD_CONTRATO_RELACIONADO AS 'CONTRATO',
    UA2.NOM_USUARIO AS 'NOM_USUARIO_COMPRADOR',
    (SELECT COUNT(COD_CONTRATO_RELACIONADO) FROM TB_DEMANDA D INNER JOIN TB_PROCESSO P ON D.COD_CONTRATO_RELACIONADO = P.NUM_CONTRATO WHERE D.COD_CONTRATO_RELACIONADO = DM.COD_CONTRATO_RELACIONADO) AS 'NUM_ADITIVO',
    0 AS 'Qtd. Aditivo',
    SUM(DM.VAL_TOTAL_ORCADO) AS 'Valor Inicial',
    SUM(TP.VAL_CONTRATADO) AS 'Valor Final',
    ((SUM(TP.VAL_CONTRATADO) / SUM(DM.VAL_TOTAL_ORCADO)) -1) * 100 AS 'Var. %'
FROM TB_FORNECEDOR TF 
    LEFT JOIN TB_DEMANDA DM ON DM.COD_FORNECEDOR = TF.COD_FORNECEDOR
    LEFT JOIN TB_PROCESSO TP ON DM.COD_DEMANDA = TP.COD_DEMANDA
    LEFT JOIN TB_PROCESSO_FORNECEDOR PF ON PF.COD_PROCESSO = TP.COD_PROCESSO
    LEFT JOIN USUARIO UA ON UA.NUM_USUARIO = DM.NUM_USUARIO_COMPRADOR
    LEFT JOIN USUARIO UA2 ON UA2.NUM_USUARIO = DM.NUM_USUARIO_COMPRADOR
    LEFT JOIN TB_STATUS_DEMANDA_DATA SD ON SD.COD_DEMANDA = DM.COD_DEMANDA
    LEFT JOIN TB_BASELINE BA ON BA.COD_PROCESSO = TP.COD_PROCESSO
    LEFT JOIN TB_BASELINE_TAREFAS BT ON BT.COD_BASELINE = BA.COD_BASELINE AND BT.COD_PROCESSO = BA.COD_PROCESSO
    LEFT JOIN TB_STATUS_PROCESSO SP ON SP.COD_STATUS = SD.COD_STATUS
    LEFT JOIN TB_MEDIO_STATUS MS ON MS.COD_MEDIO_STATUS = SP.COD_MEDIO_STATUS
    left JOIN #TB_PROCESSO TT ON TT.COD_PROCESSO = TP.COD_PROCESSO
GROUP BY 
    TF.COD_FORNECEDOR,
    TF.NOM_FANTASIA,
    DM.COD_CONTRATO_RELACIONADO,
    UA2.NOM_USUARIO,
    (SELECT COUNT(COD_CONTRATO_RELACIONADO) FROM TB_DEMANDA D INNER JOIN TB_PROCESSO P ON D.COD_CONTRATO_RELACIONADO = P.NUM_CONTRATO WHERE D.COD_CONTRATO_RELACIONADO = DM.COD_CONTRATO_RELACIONADO)
ORDER BY TF.NOM_FANTASIA 

嘗試這個:

SELECT TF.COD_FORNECEDOR AS 'Cód. Fornec.',
    TF.NOM_FANTASIA AS 'Fornecedor',
    DM.COD_CONTRATO_RELACIONADO AS 'CONTRATO',
    UA2.NOM_USUARIO AS 'NOM_USUARIO_COMPRADOR',
    sq.cnt AS 'NUM_ADITIVO',
    0 AS 'Qtd. Aditivo',
    SUM(DM.VAL_TOTAL_ORCADO) AS 'Valor Inicial',
    SUM(TP.VAL_CONTRATADO) AS 'Valor Final',
    ((SUM(TP.VAL_CONTRATADO) / SUM(DM.VAL_TOTAL_ORCADO)) -1) * 100 AS 'Var. %'
FROM TB_FORNECEDOR TF 
    LEFT JOIN TB_DEMANDA DM ON DM.COD_FORNECEDOR = TF.COD_FORNECEDOR
    LEFT JOIN TB_PROCESSO TP ON DM.COD_DEMANDA = TP.COD_DEMANDA
    LEFT JOIN TB_PROCESSO_FORNECEDOR PF ON PF.COD_PROCESSO = TP.COD_PROCESSO
    LEFT JOIN USUARIO UA ON UA.NUM_USUARIO = DM.NUM_USUARIO_COMPRADOR
    LEFT JOIN USUARIO UA2 ON UA2.NUM_USUARIO = DM.NUM_USUARIO_COMPRADOR
    LEFT JOIN TB_STATUS_DEMANDA_DATA SD ON SD.COD_DEMANDA = DM.COD_DEMANDA
    LEFT JOIN TB_BASELINE BA ON BA.COD_PROCESSO = TP.COD_PROCESSO
    LEFT JOIN TB_BASELINE_TAREFAS BT ON BT.COD_BASELINE = BA.COD_BASELINE AND BT.COD_PROCESSO = BA.COD_PROCESSO
    LEFT JOIN TB_STATUS_PROCESSO SP ON SP.COD_STATUS = SD.COD_STATUS
    LEFT JOIN TB_MEDIO_STATUS MS ON MS.COD_MEDIO_STATUS = SP.COD_MEDIO_STATUS
    LEFT JOIN #TB_PROCESSO TT ON TT.COD_PROCESSO = TP.COD_PROCESSO
    LEFT JOIN (
                SELECT D.COD_CONTRATO_RELACIONADO, COUNT(COD_CONTRATO_RELACIONADO) AS cnt 
                FROM TB_DEMANDA D 
                        INNER JOIN TB_PROCESSO P ON D.COD_CONTRATO_RELACIONADO = P.NUM_CONTRATO 
                GROUP BY D.COD_CONTRATO_RELACIONADO
            ) sq ON sq.COD_CONTRATO_RELACIONADO = DM.COD_CONTRATO_RELACIONADO
GROUP BY 
    TF.COD_FORNECEDOR,
    TF.NOM_FANTASIA,
    DM.COD_CONTRATO_RELACIONADO,
    UA2.NOM_USUARIO,
    sq.cnt
ORDER BY TF.NOM_FANTASIA 

我將num_aditivo子查詢集成到了LEFT JOIN中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM