Erro de Group By
27/03/2009
0
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
Posts
21/09/2009
Renato Tavares
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
25/09/2009
Adilsond
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´)
25/09/2009
Adilsond
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
Clique aqui para fazer login e interagir na Comunidade :)