duvidas com o GROUP BY e SUBSELECT

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

aí galera... seguinte... eu to tentando executar o codigo:

Selecionar tudo

SELECT mês, MESTOT, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM
(
    SELECT TO_CHAR(S.SERAGE, 'MON-RR') mês, COUNT(1) MESTOT,
    (
        SELECT COUNT(1) MICOLOGIA
        FROM LABSERVICOS S2, LABSETORES ST2,
        LABSERVICOSSETOR SS2
        WHERE S2.SERID = SS2.SERID
        AND SS2.SETID = ST2.SETID
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = TO_CHAR(S.SERAGE, 'MON-RR')
        AND ST2.SETNOM = 'MICOLOGIA'
    ) MICOLOGIA
    FROM LABSERVICOS S
    WHERE S.SERAGE BETWEEN (SYSDATE-600000) AND (SYSDATE+60000)
    GROUP BY TO_CHAR(S.SERAGE, 'MON-RR')
    ORDER BY mês
);
ta dando o seguinte erro:

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

e apontando para o "S.SERAGE" dentro do SUBSELECT....

alguém sabe se tem algum erro de sintaxe ou lógica ai???

agradeço a todos! =)

vlw!
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

não fiz o teste por ta muito corrido aqui no trampo...

sexta feira parece q td quer dar pau

mais tenta ver +- isso vê se da certo

Selecionar tudo

SELECT mês, MESTOT, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM 
( 
    SELECT TO_CHAR(S.SERAGE, 'MON-RR') mês,MICOLOGIA.MICOLOGIA, COUNT(1) MESTOT
    FROM LABSERVICOS S ,
        ( 
        SELECT COUNT(1) MICOLOGIA 
        FROM LABSERVICOS S2, LABSETORES ST2, 
        LABSERVICOSSETOR SS2 
        WHERE S2.SERID = SS2.SERID 
        AND SS2.SETID = ST2.SETID 
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = TO_CHAR(S.SERAGE, 'MON-RR') 
        AND ST2.SETNOM = 'MICOLOGIA' 
    ) MICOLOGIA 
    WHERE S.SERAGE BETWEEN (SYSDATE-600000) AND (SYSDATE+60000) 
    GROUP BY TO_CHAR(S.SERAGE, 'MON-RR') ,MICOLOGIA.MICOLOGIA
    ORDER BY mês 
);
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

Nossa kara... bem pensado... pena que não deu certo... porque no segundo select... estou fazendo uma junção com a tabela "LABSERVICOS" e ele não aceita eu fazer esta junção no "FROM" saca?... mas valeu a dica ai... tenho certeza que ainda vou usar muito este tipo de lógica que você apresentou! =)

eu resolvi o problema com uma gambiarrinha aqui! rsrsrs

Tive que criar uma "VIEW" para selecionar os meses e gerar o "GROUP BY" ai ele aceita... com a mesma síntaxe... a unica diferença é que ao invés de eu usar isso na junção e no group by:

Selecionar tudo

TO_CHAR(S2.SERAGE, 'MON-RR')
eu usei o campo da view... que retorna o mesmo valor... e o oracle aceitou... assim:

Selecionar tudo

SELECT MESANO, MICOLOGIA, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM
(
    SELECT VST.MESANO,
    (
        SELECT COUNT(1)
        FROM LABSERVICOS S2, LABSETORES ST2,
        LABSERVICOSSETOR SS2
        WHERE S2.SERID = SS2.SERID
        AND SS2.SETID = ST2.SETID
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = VST.MESANO
        AND ST2.SETNOM = 'MICOLOGIA'
    ) MICOLOGIA
    FROM LABSERVICOS S, V_SERVICOSTEMPO VST
    WHERE S.SERAGE BETWEEN (SYSDATE-365) AND (SYSDATE)
    AND TO_CHAR(S.SERAGE, 'MON-RR') = VST.MESANO
    GROUP BY VST.MESANO
    ORDER BY TO_DATE(VST.MESANO, 'MM-RR')
);

vlw ai a ajuda! t+
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes