Erro de Group By

27/03/2009

0

Minha query:
SELECT 
  SUM(IU.CLIENTES_ATINGIDOS) INTERROMPIDOS,
  T.DESCRICAO DESCRICAO_T,
  M.ANO_OCORRENCIA,
  M.NUM_OCORRENCIA,
  M.SEQUENCIAL,
  M.FLAG,
  M.TIPO_EQUIP_MANOBRA,
  M.EQUIPAMENTO,
  M.EQUIPAMENTO_TC,
  M.ESTADO,
  M.EQUIPE,
  M.DH_PREVISTO,
  TO_CHAR(M.DH_PREVISTO, ´DD/MM/YYYY HH24:MI:SS´) DHF_PREVISTO,
  M.DH_REAL,
  TO_CHAR(M.DH_REAL, ´DD/MM/YYYY HH24:MI:SS´) DHF_REAL,
  M.DH_ORDEM,
  TO_CHAR(M.DH_ORDEM, ´DD/MM/YYYY HH24:MI:SS´) DHF_ORDEM,
  M.DH_RETORNO,
  TO_CHAR(M.DH_RETORNO, ´DD/MM/YYYY HH24:MI:SS´) DHF_RETORNO,
  M.DESCRICAO,
  M.USUARIO_PROGRAMACAO,
  M.USUARIO_EXECUCAO,
  M.REF_SEQUENCIAL,
  ABS(M.KVA_ATINGIDOS) KVA_ATINGIDOS,
  ABS(M.CLIENTES_ATINGIDOS) CLIENTES_ATINGIDOS,
  ABS(M.CLIENTES_ESPECIAIS) CLIENTES_ESPECIAIS,
  ABS(M.CLIENTES_VIP) CLIENTES_VIP,
  M.FASES,
  PCK_MANOBRAS_COD.PEGA_ENDER_EQUIP_MANOBRA (M.TIPO_EQUIP_MANOBRA,M.EQUIPAMENTO) ENDERECO,
  M.ELO_RELE, 
  DECODE(M.ELO_RELE, ´E´, (SELECT E.ELO_FUSIVEL||´-´[color=red]||E.FASES [/color]ELO_FUSIVEL
                           FROM MANOBRAS_RP_EF E
                           WHERE E.ANO_OCORRENCIA = 2009 
                             AND E.NUM_OCORRENCIA > 1055
                             AND E.SEQUENCIAL=M.SEQUENCIAL)
                        , DECODE(M.ELO_RELE, ´R´, ´Rele´, ´Não´)) DESC_ELO_RELE
FROM MANOBRAS M, TIPOS_EQUIP_MANOBRA T, INTERRUPCOES_UT IU
WHERE
  M.TIPO_EQUIP_MANOBRA=T.TIPO_EQUIP_MANOBRA AND
  IU.ANO_OCORRENCIA = M.ANO_OCORRENCIA AND
  IU.NUM_OCORRENCIA = M.NUM_OCORRENCIA AND
  M.ANO_OCORRENCIA = 2009 AND
  M.NUM_OCORRENCIA > 1055 AND
  M.FLAG NOT IN (´PM´, ´PN´)
GROUP BY
  T.DESCRICAO ,
  M.ANO_OCORRENCIA,
  M.NUM_OCORRENCIA,
  M.SEQUENCIAL,
  M.FLAG,
  M.TIPO_EQUIP_MANOBRA,
  M.EQUIPAMENTO,
  M.EQUIPAMENTO_TC,
  M.ESTADO,
  M.EQUIPE,
  M.DH_PREVISTO,
  M.DH_PREVISTO,
  M.DH_REAL,
  M.DH_REAL,
  M.DH_ORDEM,
  M.DH_ORDEM,
  M.DH_RETORNO,
  M.DH_RETORNO, 
  M.DESCRICAO,
  M.USUARIO_PROGRAMACAO,
  M.USUARIO_EXECUCAO,
  M.REF_SEQUENCIAL,
  M.KVA_ATINGIDOS,
  M.CLIENTES_ATINGIDOS,
  M.CLIENTES_ESPECIAIS,
  M.CLIENTES_VIP,
  M.FASES,
  M.ELO_RELE

Essa query funcionava até eu colocar o sum na primeira linha. Ao colocar o sum, eu tive que colocar o Group By. Agora sempre que eu vou rodar, me dá o seguinte erro:
ORA-00979 - Não é uma expressão Group By e fica o cursor em cima da linha em vermelho. Como fazer um Group By com DECODE?


Paulo

Paulo

Responder

Posts

21/09/2009

Renato Tavares

Tenta assim: 8)

Colocar o Número da linha no campo decode. (Pelo menos no Informix funciona..!!) :wink:

SELECT
T.DESCRICAO DESCRICAO_T,
M.ANO_OCORRENCIA,
M.NUM_OCORRENCIA,
M.SEQUENCIAL,
M.FLAG,
M.TIPO_EQUIP_MANOBRA,
M.EQUIPAMENTO,
M.EQUIPAMENTO_TC,
M.ESTADO,
M.EQUIPE,
M.DH_PREVISTO,
TO_CHAR(M.DH_PREVISTO, ´DD/MM/YYYY HH24:MI:SS´) DHF_PREVISTO,
M.DH_REAL,
TO_CHAR(M.DH_REAL, ´DD/MM/YYYY HH24:MI:SS´) DHF_REAL,
M.DH_ORDEM,
TO_CHAR(M.DH_ORDEM, ´DD/MM/YYYY HH24:MI:SS´) DHF_ORDEM,
M.DH_RETORNO,
TO_CHAR(M.DH_RETORNO, ´DD/MM/YYYY HH24:MI:SS´) DHF_RETORNO,
M.DESCRICAO,
M.USUARIO_PROGRAMACAO,
M.USUARIO_EXECUCAO,
M.REF_SEQUENCIAL,
ABS(M.KVA_ATINGIDOS) KVA_ATINGIDOS,
ABS(M.CLIENTES_ATINGIDOS) CLIENTES_ATINGIDOS,
ABS(M.CLIENTES_ESPECIAIS) CLIENTES_ESPECIAIS,
ABS(M.CLIENTES_VIP) CLIENTES_VIP,
M.FASES,
PCK_MANOBRAS_COD.PEGA_ENDER_EQUIP_MANOBRA (M.TIPO_EQUIP_MANOBRA,M.EQUIPAMENTO) ENDERECO,
M.ELO_RELE,
DECODE(M.ELO_RELE, ´E´, (SELECT E.ELO_FUSIVEL||´-´[color=red:b4d498d06c]||E.FASES [/color:b4d498d06c]ELO_FUSIVEL
FROM MANOBRAS_RP_EF E
WHERE E.ANO_OCORRENCIA = 2009
AND E.NUM_OCORRENCIA > 1055
AND E.SEQUENCIAL=M.SEQUENCIAL)
, DECODE(M.ELO_RELE, ´R´, ´Rele´, ´Não´)) DESC_ELO_RELE,
SUM(IU.CLIENTES_ATINGIDOS) INTERROMPIDOS
FROM MANOBRAS M, TIPOS_EQUIP_MANOBRA T, INTERRUPCOES_UT IU
WHERE
M.TIPO_EQUIP_MANOBRA=T.TIPO_EQUIP_MANOBRA AND
IU.ANO_OCORRENCIA = M.ANO_OCORRENCIA AND
IU.NUM_OCORRENCIA = M.NUM_OCORRENCIA AND
M.ANO_OCORRENCIA = 2009 AND
M.NUM_OCORRENCIA > 1055 AND
M.FLAG NOT IN (´PM´, ´PN´)
GROUP BY
T.DESCRICAO ,
M.ANO_OCORRENCIA,
M.NUM_OCORRENCIA,
M.SEQUENCIAL,
M.FLAG,
M.TIPO_EQUIP_MANOBRA,
M.EQUIPAMENTO,
M.EQUIPAMENTO_TC,
M.ESTADO,
M.EQUIPE,
M.DH_PREVISTO,
M.DH_PREVISTO,
M.DH_REAL,
M.DH_REAL,
M.DH_ORDEM,
M.DH_ORDEM,
M.DH_RETORNO,
M.DH_RETORNO,
M.DESCRICAO,
M.USUARIO_PROGRAMACAO,
M.USUARIO_EXECUCAO,
M.REF_SEQUENCIAL,
M.KVA_ATINGIDOS,
M.CLIENTES_ATINGIDOS,
M.CLIENTES_ESPECIAIS,
M.CLIENTES_VIP,
M.FASES,
M.ELO_RELE,
30


Responder

25/09/2009

Adilsond

voce pode contornar o problema da seguinte maneira:

SELECT
X.INTERROMPIDOS,
T.DESCRICAO DESCRICAO_T,
M.ANO_OCORRENCIA,
M.NUM_OCORRENCIA,
M.SEQUENCIAL,
M.FLAG,
M.TIPO_EQUIP_MANOBRA,
M.EQUIPAMENTO,
M.EQUIPAMENTO_TC,
M.ESTADO,
M.EQUIPE,
M.DH_PREVISTO,
TO_CHAR(M.DH_PREVISTO,´DD/MM/YYYY HH24:MI:SS´) DHF_PREVISTO,
M.DH_REAL,
TO_CHAR(M.DH_REAL,´DD/MM/YYYY HH24:MI:SS´) DHF_REAL,
M.DH_ORDEM,
TO_CHAR(M.DH_ORDEM,´DD/MM/YYYY HH24:MI:SS´) DHF_ORDEM,
M.DH_RETORNO,
TO_CHAR(M.DH_RETORNO,´DD/MM/YYYY HH24:MI:SS´) DHF_RETORNO,
M.DESCRICAO,
M.USUARIO_PROGRAMACAO,
M.USUARIO_EXECUCAO,
M.REF_SEQUENCIAL,
ABS(M.KVA_ATINGIDOS) KVA_ATINGIDOS,
ABS(M.CLIENTES_ATINGIDOS) CLIENTES_ATINGIDOS,
ABS(M.CLIENTES_ESPECIAIS) CLIENTES_ESPECIAIS,
ABS(M.CLIENTES_VIP) CLIENTES_VIP,
M.FASES,
PCK_MANOBRAS_COD.PEGA_ENDER_EQUIP_MANOBRA(M.TIPO_EQUIP_MANOBRA,M.EQUIPAMENTO) ENDERECO,
M.ELO_RELE,
DECODE(M.ELO_RELE,´E´,(SELECT E.ELO_FUSIVEL||´-´||E.FASES AS ELO_FUSIVEL
FROM MANOBRAS_RP_EF E
WHERE E.ANO_OCORRENCIA = 2009
AND E.NUM_OCORRENCIA > 1055
AND E.SEQUENCIAL = M.SEQUENCIAL),
´R´,´Rele´,´Não´) DESC_ELO_RELE
FROM MANOBRAS M,
TIPOS_EQUIP_MANOBRA T,
(SELECT IU.NUM_OCORRENCIA,
SUM(IU.CLIENTES_ATINGIDOS) INTERROMPIDOS
FROM INTERRUPCOES_UT IU
WHERE M.ANO_OCORRENCIA = 2009
AND M.NUM_OCORRENCIA > 1055
GROUP BY IU.NUM_OCORRENCIA) X
WHERE M.TIPO_EQUIP_MANOBRA = T.TIPO_EQUIP_MANOBRA
AND X.NUM_OCORRENCIA = M.NUM_OCORRENCIA
AND M.ANO_OCORRENCIA = 2009
AND M.NUM_OCORRENCIA > 1055
AND M.FLAG NOT IN (´PM´,´PN´)


Responder

25/09/2009

Adilsond

voce pode contornar o problema da seguinte maneira: SELECT X.INTERROMPIDOS, T.DESCRICAO DESCRICAO_T, M.ANO_OCORRENCIA, M.NUM_OCORRENCIA, M.SEQUENCIAL, M.FLAG, M.TIPO_EQUIP_MANOBRA, M.EQUIPAMENTO, M.EQUIPAMENTO_TC, M.ESTADO, M.EQUIPE, M.DH_PREVISTO, TO_CHAR(M.DH_PREVISTO,´DD/MM/YYYY HH24:MI:SS´) DHF_PREVISTO, M.DH_REAL, TO_CHAR(M.DH_REAL,´DD/MM/YYYY HH24:MI:SS´) DHF_REAL, M.DH_ORDEM, TO_CHAR(M.DH_ORDEM,´DD/MM/YYYY HH24:MI:SS´) DHF_ORDEM, M.DH_RETORNO, TO_CHAR(M.DH_RETORNO,´DD/MM/YYYY HH24:MI:SS´) DHF_RETORNO, M.DESCRICAO, M.USUARIO_PROGRAMACAO, M.USUARIO_EXECUCAO, M.REF_SEQUENCIAL, ABS(M.KVA_ATINGIDOS) KVA_ATINGIDOS, ABS(M.CLIENTES_ATINGIDOS) CLIENTES_ATINGIDOS, ABS(M.CLIENTES_ESPECIAIS) CLIENTES_ESPECIAIS, ABS(M.CLIENTES_VIP) CLIENTES_VIP, M.FASES, PCK_MANOBRAS_COD.PEGA_ENDER_EQUIP_MANOBRA(M.TIPO_EQUIP_MANOBRA,M.EQUIPAMENTO) ENDERECO, M.ELO_RELE, DECODE(M.ELO_RELE,´E´,(SELECT E.ELO_FUSIVEL||´-´||E.FASES AS ELO_FUSIVEL FROM MANOBRAS_RP_EF E WHERE E.ANO_OCORRENCIA = 2009 AND E.NUM_OCORRENCIA > 1055 AND E.SEQUENCIAL = M.SEQUENCIAL), ´R´,´Rele´,´Não´) DESC_ELO_RELE FROM MANOBRAS M, TIPOS_EQUIP_MANOBRA T, (SELECT IU.NUM_OCORRENCIA, SUM(IU.CLIENTES_ATINGIDOS) INTERROMPIDOS FROM INTERRUPCOES_UT IU WHERE M.ANO_OCORRENCIA = 2009 AND M.NUM_OCORRENCIA > 1055 GROUP BY IU.NUM_OCORRENCIA) X WHERE M.TIPO_EQUIP_MANOBRA = T.TIPO_EQUIP_MANOBRA AND X.NUM_OCORRENCIA = M.NUM_OCORRENCIA AND M.ANO_OCORRENCIA = 2009 AND M.NUM_OCORRENCIA > 1055 AND M.FLAG NOT IN (´PM´,´PN´)


Correção:

(SELECT IU.NUM_OCORRENCIA,
SUM(IU.CLIENTES_ATINGIDOS) INTERROMPIDOS
FROM INTERRUPCOES_UT IU
WHERE IU.ANO_OCORRENCIA = 2009
AND IU.NUM_OCORRENCIA > 1055
GROUP BY IU.NUM_OCORRENCIA) X


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