Fórum ERRO ORA-00979: não é uma expressão GROUP BY #527179
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
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
Curtir tópico
+ 0
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;
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
Gostei + 0
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
Seu sql não tem função de agrupamento não há necessidade de usar o group by.
Att
João Antonio
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)