ERRO ORA-00979: não é uma expressão GROUP BY

29/07/2015

0

No final da query abaixo estou tentando fazer um GROUP BY , mais esta dando o seguinte erro: ORA-00979: não é uma expressão GROUP BY

Segue a Query:

SELECT
CAB.DTFATUR,
CAB.NUMNOTA,
PAR.NOMEPARC,
PRO.DESCRPROD,
CID.NOMECID,
UFS.UF,
PRO.MARCA,
VEN.APELIDO,
(ITE.QTDNEG) * TP0.GOLDEV AS QTD,
((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI + ITE.VLRSUBST) * TP0.GOLDEV)/((ITE.QTDNEG) * TP0.GOLDEV) AS VLRUNIT,
(ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI + ITE.VLRSUBST) * TP0.GOLDEV AS VLRTOT,
(
SELECT
SUM (MET2.VLRTOT)
FROM AD_VENMET MET2
WHERE TRUNC(MET2.REFERENCIA) BETWEEN (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(SYSDATE+10,'MM')
ELSE TRUNC(SYSDATE,'MM') END )
AND (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(LAST_DAY(sysdate+10))
ELSE TRUNC(LAST_DAY(sysdate)) END)
AND MET2.CODVEND = VEN.CODVEND
)AS META,
(
SELECT
SUM((ITE2.VLRTOT - ITE2.VLRDESC + ITE2.VLRIPI + ITE2.VLRSUBST) * TP02.GOLDEV)
FROM TGFITE ITE2
INNER JOIN TGFCAB CAB2 ON (ITE2.NUNOTA = CAB2.NUNOTA)
INNER JOIN TGFTOP TP02 ON (TP02.CODTIPOPER = CAB2.CODTIPOPER AND TP02.DHALTER = CAB2.DHTIPOPER)
INNER JOIN TSIPAR PARAM ON (PARAM.CHAVE = 'DIAAPURACAOFOLH')
WHERE CAB2.CODVEND = CAB.CODVEND
AND TP02.GOLSINAL = -1
AND CAB2.STATUSNOTA = 'L'
AND CAB2.STATUSNFE = 'A'
AND TRUNC(CAB2.DTFATUR) BETWEEN (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,0))+PARAM.INTEIRO-1
ELSE TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,-1)+PARAM.INTEIRO-1) END)
AND (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,+1))+PARAM.INTEIRO-2
ELSE TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,0 )+PARAM.INTEIRO-2) END)
) AS TOTVEND
FROM
TGFCAB CAB
INNER JOIN TGFPAR PAR ON (PAR.CODPARC = CAB.CODPARC)
INNER JOIN TSICID CID ON (CID.CODCID = PAR.CODCID)
INNER JOIN TGFITE ITE ON (ITE.NUNOTA = CAB.NUNOTA)
INNER JOIN TGFPRO PRO ON (PRO.CODPROD = ITE.CODPROD)
INNER JOIN TGFTOP TP0 ON (TP0.CODTIPOPER = CAB.CODTIPOPER AND TP0.DHALTER = CAB.DHTIPOPER)
INNER JOIN TGFVEN VEN ON (VEN.CODVEND = ITE.CODVEND)
INNER JOIN TGFVEN VEN ON (VEN.CODVEND = ITE.CODVEND)
INNER JOIN TSIUFS UFS ON (UFS.CODUF = CID.UF)
INNER JOIN AD_VENMET MET ON (MET.CODVEND = VEN.CODVEND)
INNER JOIN TSIPAR PARAM ON (PARAM.CHAVE = 'DIAAPURACAOFOLH')
WHERE TRUNC(CAB.DTFATUR) BETWEEN (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,0))+PARAM.INTEIRO-1
ELSE TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,-1)+PARAM.INTEIRO-1) END)
AND (CASE WHEN EXTRACT (DAY FROM SYSDATE) > 25 THEN TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,+1))+PARAM.INTEIRO-2
ELSE TRUNC(ADD_MONTHS(TO_DATE(TO_CHAR((TO_CHAR(SYSDATE,'MMYYYY')),'000000'),'MMYYYY') ,0 )+PARAM.INTEIRO-2) END)
AND TP0.GOLSINAL = -1
AND CAB.STATUSNOTA = 'L'
AND CAB.STATUSNFE = 'A'
AND VEN.CODVEND = 10
GROUP BY CAB.DTFATUR,
CAB.NUMNOTA,
PAR.NOMEPARC,
PRO.DESCRPROD,
CID.NOMECID,
UFS.UF,
PRO.MARCA,
VEN.APELIDO,
(ITE.QTDNEG) * TP0.GOLDEV,
((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI + ITE.VLRSUBST) * TP0.GOLDEV)/((ITE.QTDNEG) * TP0.GOLDEV),
(ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI + ITE.VLRSUBST) * TP0.GOLDEV
ORDER BY PRO.DESCRPROD,
CAB.DTFATUR
André Silva

André Silva

Responder

Posts

29/07/2015

Diego Melo

Olá André,

Essa mensagem aparece por dois motivos:

1. Você executou um SELECT que contem um GROUP BY mas não tem as funções de agrupamento tais como MIN, MAX, SUM ou COUNT.

Veja um exemplo que eu fiz bem simples:


CREATE TABLE t1_teste ( quantidade int, produto varchar2(10));

/
INSERT INTO t1_teste
VALUES (1,
'carro');


INSERT INTO t1_teste
VALUES (2,
'carro');


INSERT INTO t1_teste
VALUES (2,
'moto');


INSERT INTO t1_teste
VALUES (4,
'caminhao');

/
COMMIT;

/ -- QUERO SABER A QUANTIDADE POR PRODUTOS mas a query abaixo não funciona, retorna o mesmo erro que você tem

SELECT quantidade,
produto
FROM t1_teste
GROUP BY produto;

-- DESTA FORMA FUNCIONA

SELECT sum(quantidade) qnt,
produto
FROM t1_teste
GROUP BY produto;
Responder

01/09/2015

João Françozo

Boa tarde André,

Seu sql não tem função de agrupamento não há necessidade de usar o group by.

Att
João Antonio
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar